如何通过Django inspectdb导出MSSQL数据库所有架构的表模型
解决方案
问题原因
Django MSSQL后端默认执行inspectdb时仅扫描dbo默认架构下的表,你剩余3张表分属model、plan两个自定义架构,因此没有被导出。
操作方法
你可以任选以下一种方式实现全表导出:
方式1:临时指定架构导出(适合单次导出需求)
分批次追加导出不同架构的表到模型文件:
- 你已经完成默认
dbo架构表的导出 - 追加导出
model架构下的表:
python manage.py inspectdb --schema=model >> models.py
- 追加导出
plan架构下的表:
python manage.py inspectdb --schema=plan >> models.py
注意使用
>>追加写入符,不要用>覆盖已有内容。
方式2:配置默认扫描架构(适合长期开发需求)
修改settings.py中的数据库配置,在OPTIONS中添加inspectdb_schemas参数指定所有需要扫描的架构:
DATABASES = { 'default': { "ENGINE": "mssql", "NAME": "ips_db", "USER": "sa", "PASSWORD": "***", "HOST": "***", "PORT": "1433", "OPTIONS": { "driver": "ODBC Driver 17 for SQL Server", # 加入所有需要扫描的架构名 "inspectdb_schemas": ["dbo", "model", "plan"], }, }, }
配置完成后直接执行原有导出命令即可一次性导出所有架构下的表:
python manage.py inspectdb > models.py
注意事项
- 如果执行指定schema的命令时报错,可先升级Django MSSQL驱动版本:
pip install --upgrade django-mssql-backend - 导出的模型
Meta类中会自动携带完整架构表名(例如db_table = "[model].[three_table]"),无需手动修改,Django可直接识别 - 不要修改自动生成的
managed = False配置,避免执行迁移时改动原数据库的表结构
内容的提问来源于stack exchange,提问作者Slavik21
相关产品推荐
相关产品推荐

