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

Django部署Heroku创建超级用户遇sqlite3.OperationalError错误求助

Django部署Heroku创建超级用户遇auth_user表不存在问题的解决方案

问题情况

我用Django搭了个简单应用,部署到Heroku后想创建超级用户,结果先弹出提示说有21个未应用的迁移,得跑python manage.py migrate来应用admin、auth、contenttypes、journpys、sessions这些应用的迁移。但执行完migrate之后,再跑创建超级用户命令还是报错:

sqlite3.OperationalError: no such table: auth_user

本地和Heroku上反复执行过migrate,查了各种常规方案都没解决,最后换成PostgreSQL就搞定了。

解决步骤

1. 安装PostgreSQL相关依赖

先装psycopg2-binary(PostgreSQL的Python适配器)和dj-database-url(用来解析Heroku的数据库URL):

pip install psycopg2-binary dj-database-url

然后更新项目的requirements.txt:

pip freeze > requirements.txt

2. 修改Django的数据库配置

打开项目根目录的settings.py,把原来的SQLite数据库配置替换成PostgreSQL的适配配置:

import os
import dj_database_url

# 替换原来的SQLITE配置
DATABASES = {
    'default': dj_database_url.parse(os.environ.get('DATABASE_URL'))
}

如果本地开发还想用SQLite,可以加个判断,只在生产环境用PostgreSQL:

import os
import dj_database_url

if os.environ.get('DEBUG') == 'True':
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        }
    }
else:
    DATABASES = {
        'default': dj_database_url.parse(os.environ.get('DATABASE_URL'))
    }

3. 提交代码并部署到Heroku

把修改后的代码提交到Git,再推送到Heroku:

git add .
git commit -m "切换数据库为PostgreSQL"
git push heroku main

4. 在Heroku上执行迁移并创建超级用户

先跑迁移命令:

heroku run python manage.py migrate

然后创建超级用户:

heroku run python manage.py createsuperuser

问题原因

Heroku的文件系统是临时的,每次应用重启后,所有本地文件的变更都会丢失。SQLite是基于本地文件的数据库,迁移生成的db文件没法在Heroku上持久保存,相当于每次重启数据库都回到初始状态,自然找不到auth_user表。而PostgreSQL是Heroku官方支持的云端数据库,数据会持久存储,不会出现这类问题。

内容的提问来源于stack exchange,提问作者Uchenna Adubasim

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:42:58