Python3.8.10+Django3.2连接含多Schema的DB2数据库配置问题
问题解答
首先明确:Python 3.8.10 搭配 Django 3.2 完全支持连接包含多个Schema的DB2数据库,你遇到的Schema不生效问题由配置错误导致,按以下步骤调整即可:
1 先修正低级配置错误
你当前MYSCHEMA连接配置中SCHEMA参数值拼写错误,错写为MYSCEHMA,需先修改为正确的MYSCHEMA。
2 调整Schema配置位置
ibm_db_django驱动不会直接读取数据库配置根节点的SCHEMA参数,需要将Schema指定放到OPTIONS字段下,修改后的完整配置如下:
DATABASES = { 'default': { 'ENGINE': 'ibm_db_django', 'NAME': 'mydb', 'USER': 'db2inst1', 'PASSWORD': 'ibmdb2', 'HOST': 'localhost', 'PORT': '50000', 'PCONNECT': True, }, 'MYSCHEMA': { 'ENGINE': 'ibm_db_django', 'NAME': 'mydb', 'USER': 'db2inst1', 'PASSWORD': 'ibmdb2', 'HOST': 'localhost', 'PORT': '50000', 'PCONNECT': True, 'OPTIONS': { 'CURRENTSCHEMA': 'MYSCHEMA' } } }
调整后你之前写的SomeModel.objects.using('MYSCHEMA').all()代码就会默认访问MYSCHEMA.tabname,不会再走用户同名的db2inst1 Schema。
3 备选方案(单连接跨Schema访问场景)
如果你不想额外配置多套数据库连接,也可以直接在模型定义中指定带Schema的表名,无需修改数据库配置:
class SomeModel(models.Model): # 你的模型字段定义 class Meta: db_table = 'MYSCHEMA.tabname'
这种方式下直接用default连接查询即可命中目标Schema的表。
验证方法
配置调整完成后,执行以下命令验证连接是否能正常读取目标Schema的表结构:python manage.py inspectdb --database=MYSCHEMA
如果能正常输出对应表的模型代码,说明配置已生效。
内容的提问来源于stack exchange,提问作者Willie S
相关产品推荐
相关产品推荐

