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

Azure上Django迁移失效致登录失败:accounts_user关系不存在

Django登录报错"relation 'accounts_user' does not exist"排查方案

问题描述

部署在Azure资源组的Django项目首页可正常访问,但登录时触发错误,提示relation "accounts_user" does not exist,已通过SSH执行数据库迁移但未生效,创建超级用户后登录仍报相同错误。数据库配置参数看起来正常,错误详情及配置信息如下:

错误详情

Error:
relation "accounts_user" does not exist
LINE 1: ...s_user"."admin", "accounts_user"."timestamp" FROM "accounts_...

ignored_wrapper_args    
(False,
 {'connection': <django.db.backends.postgresql.base.DatabaseWrapper object at 0x7a01ddf85cc0>,
  'cursor': <django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7a01d58667a0>})
params  
('USER EMAIL',)
self    
<django.db.backends.postgresql.base.CursorDebugWrapper object at 0x7a01d58667a0>
sql 
('SELECT "accounts_user"."id", "accounts_user"."password", '
 '"accounts_user"."last_login", "accounts_user"."email", '
 '"accounts_user"."full_name", "accounts_user"."active", '
 '"accounts_user"."staff", "accounts_user"."admin", '
 '"accounts_user"."timestamp" FROM "accounts_user" WHERE '
 '"accounts_user"."email" = %s LIMIT 21')

数据库配置

DATABASES = {
    'default': {
        'ATOMIC_REQUESTS': False,
        'AUTOCOMMIT': True,
        'CONN_MAX_AGE': 0,
        'ENGINE': 'django.db.backends.postgresql',
        'HOST': 'MY HOST NAME.postgres.database.azure.com',
        'NAME': 'MY DATABASE NAME',
        'OPTIONS': {},
        'PASSWORD': '********************',
        'PORT': '',
        'TEST': {
            'CHARSET': None,
            'COLLATION': None,
            'MIGRATE': True,
            'MIRROR': None,
            'NAME': None
        },
        'TIME_ZONE': None,
        'USER': 'MY USERNAME'
    }
}

可能的原因及解决方法

  • 迁移命令未正确指向目标数据库
    执行迁移时可能默认使用了本地配置而非Azure PostgreSQL。需指定生产环境配置文件执行迁移:

    python manage.py migrate --settings=your_project.settings.production
    

    检查迁移命令输出,确认是否有accounts应用的迁移记录(如Applying accounts.0001_initial... OK),无记录则说明迁移未正确执行。

  • 数据库用户权限不足
    Azure PostgreSQL用户可能缺少创建表或操作schema的权限。登录数据库执行以下命令授权:

    GRANT ALL PRIVILEGES ON DATABASE "MY DATABASE NAME" TO "MY USERNAME";
    GRANT USAGE, CREATE ON SCHEMA public TO "MY USERNAME";
    
  • 迁移文件未被检测或未执行

    1. 确认accounts应用的migrations目录存在迁移文件(如0001_initial.py),且INSTALLED_APPS中已添加accounts。
    2. 生成并执行迁移:
      python manage.py makemigrations accounts
      python manage.py migrate accounts
      
    3. 若提示无变更,可导出迁移SQL手动执行:
      python manage.py sqlmigrate accounts 0001
      
      将输出的SQL复制到PostgreSQL客户端执行。
  • 数据库连接配置隐性问题

    1. Azure PostgreSQL默认端口为5432,需显式配置'PORT': '5432',避免端口为空导致连接异常。
    2. 检查Azure应用服务的环境变量,确认是否有DATABASE_URL或其他参数覆盖了本地配置,确保实际连接的是目标Azure数据库。
  • 超级用户创建指向错误数据库
    创建超级用户时需指定正确的配置文件,确保用户创建在Azure数据库中:

    python manage.py createsuperuser --settings=your_project.settings.production
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:33:16