Django 2.0删除数据报错:找不到main.app_table__old表求助
解决Django 2.0中删除模型数据时"no such table: main.app_table__old"的问题
问题背景
使用Django 2.0,app应用下的table模型无法删除数据,报错:
OperationalError at /fieldsdetails/25/delete/
no such table: main.app_table__old
已尝试删除迁移记录、重建数据库、手动删除app_table__old表等操作,均无效,需在不升级Django且保留数据的前提下解决。
解决方案
方案1:临时用原生SQL直接删除数据
绕过Django ORM的错误逻辑,直接操作数据库删除目标记录:
- 进入数据库shell:
python manage.py dbshell - 执行原生删除语句(替换
id=25为你的目标记录条件):DELETE FROM app_table WHERE id=25; - 退出shell:
.exit
方案2:修复Django迁移状态与数据库元数据
从根源解决ORM引用错误的问题:
- 先备份当前的
db.sqlite3文件,避免数据丢失。 - 检查
django_migrations表中app应用的迁移记录,确认是否有异常:python manage.py dbshellSELECT * FROM django_migrations WHERE app='app'; - 创建空迁移并标记为已应用,更新Django的迁移状态:
python manage.py makemigrations --empty app python manage.py migrate app --fake - 删除项目内所有
__pycache__文件夹,清除Django缓存后重启服务。 - 验证删除功能是否恢复正常。
方案3:修复SQLite自增序列(若存在序列异常)
如果主表的自增序列异常,可能间接导致删除操作报错:
- 进入数据库shell:
python manage.py dbshell - 重置
app_table的自增序列:UPDATE sqlite_sequence SET seq=(SELECT MAX(id) FROM app_table) WHERE name='app_table'; - 退出shell后测试删除功能。
内容的提问来源于stack exchange,提问作者tibas
相关产品推荐
相关产品推荐

