使用Django South进行反向迁移
使用Django South进行反向迁移
好的,这似乎是一个非常愚蠢的问题,我肯定错过了某些地方。
如何在 Django 上使用 South 进行向后迁移?
所以我已经调整了我的模型,用 schemamigration
创建了一个迁移,用 migrate
运行了迁移,现在我意识到那不是我想要的,我想回到之前的状态。
除了手动编辑数据库表并删除迁移文件,我应该如何回滚迁移?我通过谷歌搜索到了关于使用 South 进行向后迁移的参考,但还没有找到一个实际的代码示例。
有人能帮忙吗?
admin 更改状态以发布 2023年5月21日
以防有人(比如我)想知道如何从初始状态(0001)回迁:
django-admin.py migrate some_app zero
输出:
Running migrations for some_app: - Migrating backwards to zero state. < some_app:0001_initial
“零”是任何迁移之前的特殊状态。
你需要找出想要回滚的那个迁移之前的迁移编号。
你的应用程序应该有一个名为 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。