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'

image.png

3、重新迁移

执行迁移命令

python manage.py makemigrations appname
python manage.py migrate appname --fake

--fake用法:

用于标记指定应用(appname)的最后一个迁移为已应用,而不实际执行迁移操作。这个命令通常用于处理迁移历史记录,特别是当你需要跳过某个迁移或者在迁移过程中遇到问题时。

场景

  1. 跳过有问题的迁移: 如果某个迁移文件有问题或者不再需要,你可以使用--fake来标记它为已应用,然后继续后续的迁移。

  2. 同步迁移记录: 如果你在迁移过程中中断,或者迁移记录与实际数据库状态不一致,--fake可以帮助你同步迁移记录。

  3. 回滚迁移: 如果你需要撤销最近的迁移,可以先使用migrate appname migration_name回滚到指定迁移,然后使用--fake来标记之前的迁移为已应用。

注意事项

  • 使用--fake命令时要非常小心,因为它会改变你的迁移记录,但不改变数据库结构。如果不正确使用,可能会导致数据库状态与代码不一致。

  • 确保你完全理解迁移文件的内容,以及为什么需要使用--fake。在大多数情况下,最好先尝试修复迁移文件中的问题,而不是简单地跳过它们。

  • 在使用--fake之前,最好备份你的数据库,以防万一需要恢复。


^