好的,所以这似乎是一个非常愚蠢的问题,我敢肯定我在某个地方遗漏了一些东西。
如何在 Django 上使用 South 执行向后迁移?
所以我调整了我的模型,使用 schemamigration
创建了迁移,使用 migrate
运行迁移,现在我意识到这并不是我想要的,我希望它恢复到以前的方式。
缺少手动编辑数据库表和删除迁移文件,我应该如何回滚迁移?我通过 Google 找到了使用 South 进行向后迁移的参考,但还没有找到可靠的代码示例。
任何人都可以帮忙吗?
您需要在要回滚的迁移之前计算出迁移的数量。
您的应用程序应该有一个迁移目录,其中的文件命名为
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。
以防万一有人(像我一样)想知道如何从初始(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
migrate 0000
不起作用。关于假迁移,是的,您可能需要它,如果您只需要撤消(可能是错误的)初始迁移,但迁移历史认为,这种迁移从未发生过。
在参数末尾添加迁移名称:
./manage.py migrate app-name 00xx-migration-name
00xx
——就足够了。在改进和测试迁移时,您可以在历史记录中使用这两个命令:前进(无参数),使用先前的状态编号后退。