使用Django South进行反向迁移

33 浏览
0 Comments

使用Django South进行反向迁移

好的,这似乎是一个非常愚蠢的问题,我肯定错过了某些地方。

如何在 Django 上使用 South 进行向后迁移?

所以我已经调整了我的模型,用 schemamigration 创建了一个迁移,用 migrate 运行了迁移,现在我意识到那不是我想要的,我想回到之前的状态。

除了手动编辑数据库表并删除迁移文件,我应该如何回滚迁移?我通过谷歌搜索到了关于使用 South 进行向后迁移的参考,但还没有找到一个实际的代码示例。

有人能帮忙吗?

admin 更改状态以发布 2023年5月21日
0
0 Comments

以防有人(比如我)想知道如何从初始状态(0001)回迁:

django-admin.py migrate some_app zero

输出:

Running migrations for some_app:
 - Migrating backwards to zero state.
 < some_app:0001_initial

“零”是任何迁移之前的特殊状态。

参考:http://south.aeracode.org/docs/commands.html

0
0 Comments

你需要找出想要回滚的那个迁移之前的迁移编号。

你的应用程序应该有一个名为 migrations 的目录,其中的文件按以下方式命名:

0000_initial.py
0001_added_some_fields.py
0002_added_some_more_fields.py
0003_deleted_some_stuff.py

通常,当你运行./manage.py migrate your_app时,South会按顺序运行所有新的迁移。(它会查看数据库表以确定哪些是“新的”)。

但是,你也可以通过编号指定任何迁移,South会迁移你的数据库向前或向后以达到该点。因此,对于上面的示例文件,如果你已经迁移到了0003,并且你想要运行0003的反向迁移(实际上是撤销它),你将运行

./manage.py migrate your_app 0002

South会查看数据库,意识到它已经运行了0003,并确定它必须运行0003的反向迁移以返回到0002。

0