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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:07:29