如何在Django中重新创建已手动删除的SQLite3数据库表
手动删表后migrate无法重建的解决办法
方法一:重置迁移记录(通用推荐)
- 删除对应app下
migrations目录里,除了__init__.py之外的所有迁移文件 - 操作SQLite3数据库,删除
django_migrations表中该app的所有迁移记录:DELETE FROM django_migrations WHERE app = '你的app名称'; - 重新生成初始迁移文件:
python manage.py makemigrations - 执行迁移重建表:
python manage.py migrate
方法二:单表快速修复
如果只想恢复特定被删的表,不用重置所有迁移:
- 找到该表对应的迁移文件名(比如
0001_initial.py),删除django_migrations表中这条迁移的记录:DELETE FROM django_migrations WHERE name = '0001_initial' AND app = '你的app名称'; - 执行迁移时加上
--fake-initial参数,强制重建不存在的表:python manage.py migrate 你的app名称 0001_initial --fake-initial
关键说明
问题根源是:migrate命令依赖数据库里的django_migrations表记录判断是否需要执行迁移。你手动删了表,但这条迁移记录还在,所以系统认为已经执行过迁移,不会重建。
注意
操作数据库前一定要备份数据,避免误删其他重要记录。如果用的是其他ORM框架(比如Flask-SQLAlchemy的Alembic),逻辑类似:清理对应迁移记录,重新生成并执行迁移即可。
内容的提问来源于stack exchange,提问作者Vaibhav Singh
相关产品推荐
相关产品推荐

