django重置迁移文件(不删除原有数据)
发布时间:2024-11
浏览量:251
本文字数:844
读完约 3 分钟
背景:迁移文件太多,且历史迁移文件中存在已经弃用或删除的模块,导致继续修改模型后无法迁移
实测按照以下步骤可以完美的实现django重置迁移,且不影响数据库已有数据(不删除原表、不改变原有数据、不改变表结构)
django版本:5.1
python版本:3.12
1、删除历史所有迁移文件
注意:最好提前备份数据库,以免出现意外情况
应用内的 migrations 文件夹内除 __init__.py 文件保留,其他历史迁移文件直接删除
2、清除线上迁移记录表的内容
在数据库里删除 django_migrations 表中app的迁移记录
# 选择需要清除的app即可 delete from django_migrations where app ='appname'
3、重新迁移
执行迁移命令
python manage.py makemigrations appname python manage.py migrate appname --fake
--fake用法:
用于标记指定应用(appname)的最后一个迁移为已应用,而不实际执行迁移操作。这个命令通常用于处理迁移历史记录,特别是当你需要跳过某个迁移或者在迁移过程中遇到问题时。
场景
跳过有问题的迁移: 如果某个迁移文件有问题或者不再需要,你可以使用
--fake
来标记它为已应用,然后继续后续的迁移。同步迁移记录: 如果你在迁移过程中中断,或者迁移记录与实际数据库状态不一致,
--fake
可以帮助你同步迁移记录。回滚迁移: 如果你需要撤销最近的迁移,可以先使用
migrate appname migration_name
回滚到指定迁移,然后使用--fake
来标记之前的迁移为已应用。
注意事项
使用
--fake
命令时要非常小心,因为它会改变你的迁移记录,但不改变数据库结构。如果不正确使用,可能会导致数据库状态与代码不一致。确保你完全理解迁移文件的内容,以及为什么需要使用
--fake
。在大多数情况下,最好先尝试修复迁移文件中的问题,而不是简单地跳过它们。在使用
--fake
之前,最好备份你的数据库,以防万一需要恢复。