迁移Django项目至新设备后/admin/login/报ProgrammingError错误求助
解决Django迁移后
django_session表不存在的Admin登录错误 我之前也碰到过一模一样的问题,核心原因是你用的fake migration只是在Django的迁移记录里标记「所有迁移已完成」,但并没有实际在数据库中创建Django内置应用(比如sessions、admin)所需的表。django_session是Django会话系统依赖的核心表,登录Admin时会自动查询这个表,自然就会抛出不存在的错误。
下面分两种场景给出解决方案:
场景一:数据库中还没有重要业务数据
这种情况处理起来最简单,直接重新执行真实的迁移即可:
- 先备份当前数据库(避免意外)
- 清空数据库所有表,或者直接删除数据库后重新创建
- 在项目根目录执行真正的迁移命令:
这个命令会自动创建所有Django内置应用和你自定义应用需要的表,包括python manage.py migratedjango_session、django_admin_log等必需表。
场景二:数据库中已有重要业务数据,不能清空
这种情况需要针对性地为缺失的内置应用执行迁移,而不影响现有业务表:
- 先确认你的
settings.py中已经包含了Django的核心内置应用(默认应该有,但最好检查一下):INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 你的自定义应用放在这里 ] - 针对缺失表的内置应用,逐个执行迁移命令:
这些命令只会为指定的内置应用创建缺失的表,不会改动你已有的业务数据。# 创建sessions相关表(包括django_session) python manage.py migrate sessions # 创建auth系统相关表 python manage.py migrate auth # 创建admin后台相关表 python manage.py migrate admin # 创建内容类型相关表 python manage.py migrate contenttypes # 创建消息框架相关表 python manage.py migrate messages
额外注意事项
- 执行迁移前确保数据库配置正确(
settings.py中的DATABASES),并且数据库用户拥有创建表的权限 - 如果执行迁移时提示「迁移已应用」,可以加上
--fake-initial参数(仅针对首次迁移的情况):python manage.py migrate sessions --fake-initial
内容的提问来源于stack exchange,提问作者zero
相关产品推荐
相关产品推荐

