如何使用 Django migrate 命令跳过迁移?

Posted

技术标签:

【中文标题】如何使用 Django migrate 命令跳过迁移?【英文标题】:How can I skip a migration with Django migrate command? 【发布时间】:2015-09-30 21:31:24 【问题描述】:

首先,我问的是 1.7 中引入的 Django 迁移,而不是south

假设我有迁移001_add_field_x002_add_field_y,并且它们都应用于数据库。现在我改变主意并决定恢复第二次迁移并用另一个迁移003_add_field_z 替换它。

也就是说,我想申请001和003,跳过002,怎么办?

附:我知道我可以向后迁移到 001,但是在我进行 003 迁移并执行 migrate 命令之后,001 到 003 都会被应用,对吧?

【问题讨论】:

【参考方案1】:

您可以使用--fake 选项。

一旦你恢复到0001,你就可以运行

python manage.py migrate <app> 0002 --fake

然后运行

python manage.py migrate <app> #Optionally specify 0003 explicitly

在这种情况下仅适用于0003

如果您不想为所有环境/其他开发人员遵循此过程,您可以删除迁移文件,然后运行新的 makemigration,然后提交该文件 - 是的,请运行 migrate --fake 选项

文档:https://docs.djangoproject.com/en/3.1/ref/django-admin/#cmdoption-migrate-fake

【讨论】:

【参考方案2】:

不适用于此特定情况,但如果想要或需要跳过所有未应用的迁移,可以使用:

python manage.py migrate --fake

只是节省了一点打字时间。

【讨论】:

以上是关于如何使用 Django migrate 命令跳过迁移?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有确认的情况下使用 django migrate

9.Django里的数据同步migrate命令

如何解决Django 1.8在migrate时失败

如何解决Django 1.8在migrate时失败

如何解决Django 1.8在migrate时失败

django 的 migrations 文件重置管理