Django项目admin后台更新用户报no such table: main.auth_user__old错误如何解决
问题根因
这个报错是Django 2.0.x及更早版本与SQLite 3.26及以上版本的兼容性问题。SQLite 3.26版本修改了ALTER TABLE语句的默认行为,Django旧版本的ORM处理表重命名的逻辑未适配该变动,执行数据更新操作时会试图访问不存在的*__old格式临时表,最终抛出该错误。你使用的Django 2.0.7早已停止维护,和Python 3.9、新版系统内置的SQLite版本天然不兼容,和你的操作步骤无关。
解决方法(优先推荐)
升级Django到兼容版本即可解决,该方案不会影响你跟着现有教程学习:
- 激活项目对应的虚拟环境,执行升级命令:
pip install django==2.2.28(2.2为长期支持版本,兼容Python 3.9,和Django 2.0的语法差异极小) - 删除项目根目录下的
db.sqlite3数据库文件,删除项目内每个app下migrations目录中除__init__.py外的所有文件 - 重新执行数据库迁移:
python manage.py makemigrations python manage.py migrate - 重新创建超级管理员账号:
python manage.py createsuperuser
操作完成后再次进入admin后台修改用户信息即可正常运行。
可选方案(不推荐)
如果必须使用Django 2.0.7,需要将SQLite版本降级到3.25及以下,该方案需要修改系统依赖或单独编译SQLite,操作复杂度高,不建议新手使用。
内容的提问来源于stack exchange,提问作者dizzyme09
相关产品推荐
相关产品推荐

