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

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的错误逻辑,直接操作数据库删除目标记录:

  1. 进入数据库shell:
    python manage.py dbshell
    
  2. 执行原生删除语句(替换id=25为你的目标记录条件):
    DELETE FROM app_table WHERE id=25;
    
  3. 退出shell:
    .exit
    

方案2:修复Django迁移状态与数据库元数据

从根源解决ORM引用错误的问题:

  1. 先备份当前的db.sqlite3文件,避免数据丢失。
  2. 检查django_migrations表中app应用的迁移记录,确认是否有异常:
    python manage.py dbshell
    
    SELECT * FROM django_migrations WHERE app='app';
    
  3. 创建空迁移并标记为已应用,更新Django的迁移状态:
    python manage.py makemigrations --empty app
    python manage.py migrate app --fake
    
  4. 删除项目内所有__pycache__文件夹,清除Django缓存后重启服务。
  5. 验证删除功能是否恢复正常。

方案3:修复SQLite自增序列(若存在序列异常)

如果主表的自增序列异常,可能间接导致删除操作报错:

  1. 进入数据库shell:
    python manage.py dbshell
    
  2. 重置app_table的自增序列:
    UPDATE sqlite_sequence SET seq=(SELECT MAX(id) FROM app_table) WHERE name='app_table';
    
  3. 退出shell后测试删除功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:25:21