执行migrations与migrate后访问/admin/login/仍遇OperationalError:auth_user表不存在问题求助
no such table: auth_user的问题 我之前也碰到过这个一模一样的棘手问题,咱们一步步排查解决:
确认核心App已加入INSTALLED_APPS
打开你的settings.py,检查INSTALLED_APPS列表里是否包含django.contrib.auth和django.contrib.contenttypes这两个核心App。auth_user表是由django.contrib.auth生成的,这两个App必须存在。如果缺失,添加后保存文件,再重新执行迁移命令:python manage.py makemigrations python manage.py migrate彻底清理迁移文件与数据库
有时候旧的迁移文件会干扰新的迁移流程,你可以按以下步骤操作:- 遍历每个App下的
migrations文件夹,删除其中所有以数字开头的迁移文件(保留__init__.py) - 删除当前的数据库文件(比如SQLite的
db.sqlite3,如果是MySQL/PostgreSQL则直接删除对应数据库) - 重新创建数据库(MySQL/PostgreSQL需要手动创建,SQLite会自动生成)
- 先优先迁移核心App,再执行全量迁移:
python manage.py migrate auth python manage.py migrate contenttypes python manage.py migrate
- 遍历每个App下的
检查数据库配置是否正确
确认settings.py中的DATABASES配置指向的是你重新创建的数据库。比如SQLite的NAME路径是否正确,MySQL的NAME、USER、PASSWORD是否和实际创建的数据库匹配——如果配置错了,你执行的迁移根本没作用在目标数据库上,自然找不到表。排查自定义用户模型的问题
如果你使用了自定义用户模型,务必确保在settings.py中设置了:AUTH_USER_MODEL = 'your_app.YourCustomUserModel'注意这个设置必须在第一次执行migrate之前就配置好。如果之前没设置就跑了迁移,那必须彻底清理迁移文件和数据库,先配置好
AUTH_USER_MODEL再重新执行迁移流程。清理Django缓存与编译文件
有时候Django会缓存迁移状态或者编译文件导致异常:- 删除项目中所有
__pycache__文件夹 - 如果是Django 4.2及以上版本,执行:
python manage.py clearcache - 重新执行迁移命令
- 删除项目中所有
检查数据库权限与迁移日志
查看python manage.py migrate的输出日志,看看有没有隐藏的报错信息——比如数据库用户没有创建表的权限,导致auth_user表根本没被创建。如果是MySQL/PostgreSQL,要确保数据库用户拥有CREATE、ALTER等权限。
内容的提问来源于stack exchange,提问作者Salish Kumar

