Django多数据库场景下如何正确执行非默认first数据库的迁移操作
Django多数据库迁移未生效问题解决方案
你遇到的问题核心是迁移执行顺序错误,makemigrations是生成模型变更迁移文件的步骤,必须在migrate之前执行,你先执行migrate --database=first时还没有生成对应字段调整的迁移文件,自然不会对first库的表结构做实际修改。
正确的多数据库迁移操作流程
- 修改完first库关联的模型字段后,首先执行
python manage.py makemigrations,确认命令输出中包含了你调整的模型对应的变更记录,生成对应的迁移文件。 - 针对first库执行迁移应用操作:
python manage.py migrate --database=first,此时程序会读取已生成的迁移文件,对first库的表结构做实际调整。 - 如果default库也需要应用同批次的模型变更,再执行
python manage.py migrate --database=default,如果你的数据库路由已经配置对应模型仅归属first库,可跳过此步骤。
当前问题的修复步骤
- 首先检查对应app的
migrations目录,确认是否存在字段调整对应的迁移文件:如果没有相关变更记录,重新执行python manage.py makemigrations生成迁移文件。 - 确认迁移文件存在后,重新执行
python manage.py migrate --database=first,查看命令输出中是否有对应迁移记录被应用的提示。 - 迁移执行完成后,可直接登录first对应的MySQL数据库,执行
desc 你的业务表名;命令,确认新增字段是否已经真实存在于表结构中。
额外注意事项
检查你的
DatabaseRouter类中的allow_migrate方法逻辑,确认针对first库、对应模型的迁移请求返回值为True,如果该方法返回False,即使你指定了--database=first参数,迁移也会被系统拦截不会实际执行。
如果执行migrate时提示无需要迁移的内容,但表结构确实未更新,可执行python manage.py showmigrations --database=first查看对应迁移的应用状态,标记为未应用的迁移才会被执行。如果是迁移状态异常,可手动调整first库中的django_migrations表记录,或使用--fake参数修正状态后重新执行迁移。
内容的提问来源于stack exchange,提问作者Yash Bontala
相关产品推荐
相关产品推荐

