Django后台创建Post时报错:找不到main.auth_user__old表
解决Django中
no such table: main.auth_user__old的错误 嘿,这个坑我之前在Django+SQLite的环境里踩过好几次!no such table: main.auth_user__old这个错误本质上是SQLite在处理数据库迁移时的临时表残留或者迁移状态不一致导致的,结合你用的Django 2.1.4、Python3.7.2和SQLite,给你几个一步步能解决的方案:
1. 先检查并修复auth应用的迁移状态
首先大概率是auth模块的迁移没跑对,先看看当前迁移的状态:
python manage.py showmigrations
如果看到auth相关的迁移有未应用的,或者状态标红异常,先单独重新应用auth的迁移:
python manage.py migrate auth
要是还是不行,试试先回滚auth的所有迁移再重新执行(注意:如果是生产环境一定要先备份数据库!本地开发的话放心搞):
python manage.py migrate auth zero python manage.py migrate auth
2. 直接重置SQLite数据库(本地开发最快捷)
因为SQLite是文件型数据库,有时候文件损坏或者临时表残留很难排查,直接重置最省心:
- 找到项目根目录下的
db.sqlite3文件,删掉它 - 给你的
message应用重新生成迁移文件:python manage.py makemigrations message - 执行所有迁移初始化数据库:
python manage.py migrate - 别忘了重新创建超级用户(之前的用户数据都没了):
python manage.py createsuperuser
3. 检查SQLite版本是否达标
Django 2.1.4要求SQLite的版本至少是3.8.3,你可以用下面的命令查当前版本:
python -c "import sqlite3; print(sqlite3.sqlite_version)"
如果版本低于3.8.3,赶紧升级SQLite到符合要求的版本,老版本的SQLite和Django 2.x的兼容性确实有问题。
4. 排查自定义迁移文件的问题
检查你的message应用下的迁移文件,确保里面没有莫名其妙修改auth_user表的内容,如果有错误的迁移代码,删掉对应的迁移文件,然后重新生成迁移再执行。
内容的提问来源于stack exchange,提问作者Bhaskar Praveen
相关产品推荐
相关产品推荐

