一尘不染

使用Django South向后迁移

django

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

因此,我调整了模型,使用进行了迁移schemamigration,使用进行了迁移migrate,现在我意识到这并不是我想要的,并且我想回到以前的样子。

除了手动编辑数据库表和删除迁移文件之外,我应该如何回滚迁移?我找到了通过Google通过South使用向后迁移的参考,但尚未找到可靠的代码示例。

有人可以帮忙吗?


阅读 322

收藏
2020-04-03

共2个答案

一尘不染

你需要在要回滚的迁移之前弄清楚迁移的数量。

你的应用程序应该有一个迁移目录,其中的文件名为

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。

2020-04-03
一尘不染

以防万一(像我一样)想知道如何从初始(0001)迁移回去:

django-admin.py migrate some_app zero

输出:

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

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

2020-04-03