问题现象
换了新数据库后跑 migrate,第一条就报 no such table: django_migrations,表结构完全没建起来。
原因分析
迁移记录表本身要靠迁移创建,但数据库连接指向的库或 schema 不对,框架在该库里看不到已初始化的结构。判断时先分清是 Django 迁移表缺失 本身的配置问题,还是上游调用、运行环境带进来的差异;前者改配置就能收口,后者要沿着请求链路一层层往上找,处理顺序不能颠倒。先在出问题的机器上复现一次,把报错原文和发生时间记下来,再对着日志定位。
处理步骤
- 先确认 settings 里的库名与账号实际指向
- 检查是否误连到只读从库或空 schema
- 在目标库手动执行 migrate 并指定 app
对应的命令或配置片段如下,可直接复制:
python manage.py showmigrations python manage.py migrate --database default # 确认当前连接 python manage.py shell -c "from django.db import connection; print(connection.settings_dict['NAME'])"
排查时把每一步的输出留下来,后面再遇到同类问题,对照日志就能判断是哪一层先出错的。改动前把原配置备份一份,出问题时能马上回退,比现场找原因省时间。
验证结果
showmigrations 里所有应用显示已打勾,接口能正常读写,说明迁移记录与表结构都对上了。