Django报OperationalError:不存在polls_band表,执行迁移仍未解决
我太懂这种明明执行了迁移还是报错的困惑了——之前开发Django项目时也踩过类似的坑,咱们一步步来排查:
首先先把你提供的错误栈补全展示(看起来内容有点截断了,建议后续补充完整的错误提示,比如最后一行的具体SQL异常信息,这对定位问题至关重要):
Traceback (most recent call last): File "C:\Users\Ethan\Envs\OnNote\lib\site-packages\django\db\backends\utils.py", line 64, in execute return self.cursor.execute(sql, params) File "C:\Users\Ethan\Envs\OnNote\lib\site-packages\django\db\backends\sqlite3\base.py", line 328, in execute return Database.Cursor.execute(self, query, params)
基于现有信息,给你几个常见的排查方向:
先确认迁移是否真的生效
运行python manage.py migrate --list查看所有迁移的状态,看看有没有标记为[X]的已应用迁移,以及是否有未应用的条目。有时候执行migrate时看似成功,但实际因为迁移文件语法错误、数据库锁等问题导致没真正执行。核对模型与迁移文件的一致性
如果你手动修改过模型但没生成新的迁移,或者迁移文件被误改,就会出现模型和数据库结构不匹配的情况。可以先执行python manage.py makemigrations,如果提示“no changes detected”,说明模型和迁移是一致的;如果生成了新的迁移,再重新执行migrate试试。注意SQLite的Schema变更限制
SQLite对某些数据库结构修改(比如修改字段类型、删除字段、重名字段)支持有限,Django处理这类操作时可能会有兼容问题。如果你的迁移涉及这类操作,可以试试:- 先备份当前的
db.sqlite3文件 - 删除数据库文件,重新执行
python manage.py migrate初始化(适合开发环境,数据不重要的情况) - 或者使用专门适配SQLite的工具辅助处理复杂变更
- 先备份当前的
检查数据库文件的权限和路径
确认Django配置里的DATABASES设置的路径正确,当前用户对db.sqlite3文件有读写权限。有时候权限不足会导致迁移无法写入数据库,看似执行成功但实际没生效。
最后,一定要把错误栈的最后一行补充完整——通常会有类似OperationalError: no such table: myapp_mymodel或者column myapp_mymodel.new_field does not exist的具体提示,这能直接帮我们锁定问题点。
内容的提问来源于stack exchange,提问作者Ethan Pearce

