误删Django migrations文件夹后fake迁移失效,表不存在如何修复?
解决方案
问题根源
你执行的migrate --fake仅让Django在django_migrations表中标记迁移已完成,但并未在数据库中实际创建对应表;同时新生成的迁移文件与数据库中留存的旧迁移记录不匹配,导致系统无法识别表结构。
处理步骤
- 先备份数据库(重要,避免数据丢失)
- 清除对应APP的旧迁移记录
- 直接在数据库中执行SQL命令:
DELETE FROM django_migrations WHERE app='你的APP名称'; - 或通过Django Shell执行:
from django.db import connection with connection.cursor() as cursor: cursor.execute("DELETE FROM django_migrations WHERE app='你的APP名称';")
- 直接在数据库中执行SQL命令:
- 删除当前的migrations文件夹
- Linux/macOS终端命令:
rm -r 你的APP目录/migrations/ - Windows命令提示符:
rmdir /s /q 你的APP目录\migrations
- Linux/macOS终端命令:
- 重新生成迁移文件
python manage.py makemigrations - 执行真实迁移操作
如果数据库中尚未创建目标表,直接执行:
若数据库中已存在目标表(比如之前手动创建过),则执行:python manage.py migratepython manage.py migrate --fake-initial
内容的提问来源于stack exchange,提问作者metkopetru
相关产品推荐
相关产品推荐

