问题现象

换了新数据库后跑 migrate,第一条就报 no such table: django_migrations,表结构完全没建起来。

原因分析

迁移记录表本身要靠迁移创建,但数据库连接指向的库或 schema 不对,框架在该库里看不到已初始化的结构。判断时先分清是 Django 迁移表缺失 本身的配置问题,还是上游调用、运行环境带进来的差异;前者改配置就能收口,后者要沿着请求链路一层层往上找,处理顺序不能颠倒。先在出问题的机器上复现一次,把报错原文和发生时间记下来,再对着日志定位。

处理步骤

  1. 先确认 settings 里的库名与账号实际指向
  2. 检查是否误连到只读从库或空 schema
  3. 在目标库手动执行 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 里所有应用显示已打勾,接口能正常读写,说明迁移记录与表结构都对上了。

作者 9823189