如何使用 Django migrate 命令跳过迁移?
How can I skip a migration with Django migrate command?
首先,我问的是1.7引入的Django迁移,不是south
。
假设我有迁移 001_add_field_x
、002_add_field_y
,并且它们都应用于数据库。现在我改变主意,决定恢复第二个迁移并用另一个迁移替换它 003_add_field_z
。
也就是说,我想申请001和003,跳过002,我该怎么做?
P.S。我知道我可以向后迁移到 001,但是在我进行 003 迁移并执行迁移命令后,001 到 003 将全部应用,对吗?
您可以使用 --fake
选项。
恢复到 0001
后,您可以 运行
python manage.py migrate <app> 0002 --fake
然后是运行
python manage.py migrate <app> #Optionally specify 0003 explicitly
在这种情况下仅适用 0003
。
如果您不想对所有 environment/other 开发人员执行此过程,您可以删除迁移文件,运行 一个新的 makemigration
,然后提交该文件- 是的,使用 --fake
选项
执行 运行 migrate
文档:https://docs.djangoproject.com/en/3.1/ref/django-admin/#cmdoption-migrate-fake
不适用于这种特定情况,但如果想要或需要跳过 所有 未应用的迁移,可以使用:
python manage.py migrate --fake
只是节省了一些输入。
首先,我问的是1.7引入的Django迁移,不是south
。
假设我有迁移 001_add_field_x
、002_add_field_y
,并且它们都应用于数据库。现在我改变主意,决定恢复第二个迁移并用另一个迁移替换它 003_add_field_z
。
也就是说,我想申请001和003,跳过002,我该怎么做?
P.S。我知道我可以向后迁移到 001,但是在我进行 003 迁移并执行迁移命令后,001 到 003 将全部应用,对吗?
您可以使用 --fake
选项。
恢复到 0001
后,您可以 运行
python manage.py migrate <app> 0002 --fake
然后是运行
python manage.py migrate <app> #Optionally specify 0003 explicitly
在这种情况下仅适用 0003
。
如果您不想对所有 environment/other 开发人员执行此过程,您可以删除迁移文件,运行 一个新的 makemigration
,然后提交该文件- 是的,使用 --fake
选项
migrate
文档:https://docs.djangoproject.com/en/3.1/ref/django-admin/#cmdoption-migrate-fake
不适用于这种特定情况,但如果想要或需要跳过 所有 未应用的迁移,可以使用:
python manage.py migrate --fake
只是节省了一些输入。