You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django从SQLite3迁移到MySQL执行migrate报错表不存在问题求助

报错根因分析
  • 你遇到的是自定义用户模型场景下的Django迁移依赖顺序问题,不需要手动创建数据库表,migrate自动建表的机制是正常的,报错是配置或迁移流程不规范导致的。
  • 最常见的遗漏点是没有在settings.py中显式配置AUTH_USER_MODEL参数,Django默认还是尝试用内置auth.User的逻辑,和你自定义的CustomUser产生冲突,迁移时提前访问未创建的表。
  • 你删除所有旧迁移后直接全局执行makemigrations,生成的迁移文件顺序不符合依赖要求:Django内置auth、contenttypes等系统应用的迁移依赖CustomUser表,系统迁移先执行时就会访问还没创建的CustomUser表。
  • 也有可能是你的自定义用户所在app没有放到INSTALLED_APPS列表中django.contrib.auth的前面,导致迁移加载顺序错误。
可行解决方案

步骤1:修正配置

检查settings.py文件,确保以下配置正确:

  • 你的自定义用户所属app(示例名为djangoapp)已经加入INSTALLED_APPS列表,且排在django.contrib.auth的前面
  • 已经添加指定自定义用户模型的配置:
AUTH_USER_MODEL = "djangoapp.CustomUser"

将djangoapp替换为你自己的应用名即可。

步骤2:重置迁移流程

因为你的MySQL库是空的,直接重走迁移流程即可:

  1. 清空MySQL中djangoappdb库的所有残留表,也可以直接执行SQL删库重建,原有用户授权无需修改:
DROP DATABASE djangoappdb;
CREATE DATABASE djangoappdb;
  1. 删除你自己应用(djangoapp)下migrations目录内的所有文件,仅保留__init__.py,同时删除同目录下的__pycache__文件夹。
  2. 先单独给自定义用户所属应用生成迁移文件:
python3 manage.py makemigrations djangoapp
  1. 再执行全局迁移生成:
python3 manage.py makemigrations
  1. 执行迁移建表:
python3 manage.py migrate

此时不会再出现表不存在的报错。
6. 迁移完成后导入之前导出的业务数据:

python3 manage.py loaddata currData

如果导入时出现外键冲突,可以重新导出数据时添加自然键参数再导入:

# 重新导出命令(可选,仅loaddata报错时执行)
python3 manage.py dumpdata --natural-foreign --natural-primary > currData

内容的提问来源于stack exchange,提问作者user1933205

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:39:03