Django 2.0.7 admin后台保存触发OperationalError无auth_user__old表问题
解决Django 2.0.7后台新增数据报错
no such table: main.auth_user__old 报错原因
该问题是Django 2.0.x、2.1.x系列版本与SQLite 3.26及以上版本的兼容性缺陷:SQLite 3.26版本修改了ALTER TABLE语句的执行逻辑,而对应版本的Django没有适配该变更,处理表变更时会错误查询不存在的*__old后缀表,触发报错。
解决方案
方案1:升级Django版本(长期有效,推荐)
官方已经在Django 2.0.8、2.1.5版本修复了该bug,直接升级到对应修复版本即可:
# 升级到2.0分支最新修复版 pip install Django==2.0.13 # 也可选择升级到2.2.x长期支持版,兼容性更好 pip install Django==2.2.28
升级完成后执行迁移同步即可正常使用:
python manage.py makemigrations python manage.py migrate
方案2:不升级Django临时处理
如果当前项目暂时无法升级Django版本,按以下步骤操作:
- 先备份项目根目录下的SQLite数据库文件(默认名称为
db.sqlite3) - 删除
products/migrations目录下除__init__.py之外的所有迁移文件 - 删除根目录下的原
db.sqlite3数据库文件 - 重新执行迁移命令生成新的数据库:
python manage.py makemigrations python manage.py migrate
- 重新创建后台管理员账号:
python manage.py createsuperuser
操作完成后即可正常在后台新增产品数据。
内容的提问来源于stack exchange,提问作者CodedX
相关产品推荐
相关产品推荐

