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

迁移Django项目至新设备后/admin/login/报ProgrammingError错误求助

解决Django迁移后django_session表不存在的Admin登录错误

我之前也碰到过一模一样的问题,核心原因是你用的fake migration只是在Django的迁移记录里标记「所有迁移已完成」,但并没有实际在数据库中创建Django内置应用(比如sessions、admin)所需的表。django_session是Django会话系统依赖的核心表,登录Admin时会自动查询这个表,自然就会抛出不存在的错误。

下面分两种场景给出解决方案:

场景一:数据库中还没有重要业务数据

这种情况处理起来最简单,直接重新执行真实的迁移即可:

  1. 先备份当前数据库(避免意外)
  2. 清空数据库所有表,或者直接删除数据库后重新创建
  3. 在项目根目录执行真正的迁移命令:
    python manage.py migrate
    
    这个命令会自动创建所有Django内置应用和你自定义应用需要的表,包括django_session、django_admin_log等必需表。

场景二:数据库中已有重要业务数据,不能清空

这种情况需要针对性地为缺失的内置应用执行迁移,而不影响现有业务表:

  1. 先确认你的settings.py中已经包含了Django的核心内置应用(默认应该有,但最好检查一下):
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        # 你的自定义应用放在这里
    ]
    
  2. 针对缺失表的内置应用,逐个执行迁移命令:
    # 创建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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:04:58