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";迁移文件未被检测或未执行
- 确认
accounts应用的migrations目录存在迁移文件(如0001_initial.py),且INSTALLED_APPS中已添加accounts。 - 生成并执行迁移:
python manage.py makemigrations accounts python manage.py migrate accounts - 若提示无变更,可导出迁移SQL手动执行:
将输出的SQL复制到PostgreSQL客户端执行。python manage.py sqlmigrate accounts 0001
- 确认
数据库连接配置隐性问题
- Azure PostgreSQL默认端口为5432,需显式配置
'PORT': '5432',避免端口为空导致连接异常。 - 检查Azure应用服务的环境变量,确认是否有
DATABASE_URL或其他参数覆盖了本地配置,确保实际连接的是目标Azure数据库。
- Azure PostgreSQL默认端口为5432,需显式配置
超级用户创建指向错误数据库
创建超级用户时需指定正确的配置文件,确保用户创建在Azure数据库中:python manage.py createsuperuser --settings=your_project.settings.production
内容的提问来源于stack exchange,提问作者Luiz Godoy
相关产品推荐
相关产品推荐

