巩固 Django South Migrations
Posted
技术标签:
【中文标题】巩固 Django South Migrations【英文标题】:Consolidating Django South Migrations 【发布时间】:2012-12-23 21:06:53 【问题描述】:在我的项目的初始阶段,我对模型进行了很多更改,因此我最终为我的应用程序生成了很多南迁移。在去我的生产服务器执行迁移之前,是否可以以任何方式整合它们,这样我就不会为每个应用程序进行一百万次迁移?如果是这样,我该怎么做?
【问题讨论】:
【参考方案1】:您可以随时删除现有的迁移和create a new "initial" migration。
为此,您需要:
-
为您的应用删除迁移文件(完全删除文件夹)
运行
./manage.py convert_to_south myapp
这将为您留下一个与您的应用状态当前状态相对应的迁移。
或者,您可以随时将最新的迁移打包在一起:
-
删除要合并的迁移文件(仅当它们是最新的)
运行
./manage.py schemamigration myapp
这将创建一个与您删除的迁移相对应的新迁移。
这两种情况都可能会弄乱您的开发数据库。
【讨论】:
所以底线是:不,最好让迁移自己生存? @hkothari 我就是这么做的,是的! 也需要manage.py migrate <myapp> zero --fake
来清除您的南数据库(在 convert_to_south 或 manage.py schemamigration <myapp> --initial
之前。或者--delete-ghost-migrations
将有选择地删除您从迁移目录中删除的所有迁移【参考方案2】:
由于这是一个开发环境,我就是这样做的(使用 SQLite,其他 SQL 服务器见下文):
-
进行所有更改,让迁移文件堆积起来。不承诺
将文件迁移到 VCS
完成后,删除所有新的迁移文件
重命名数据库
运行 manage.py 迁移。这将创建与您进行任何更改之前一样的数据库结构。
运行 manage.py makemigrations。这将创建反映您当前状态的必要迁移
将已经拥有最终结构和数据的原始数据库移回
提交迁移文件
当使用“合适的”SQL 服务器时,只需保留两个数据库:生产和开发。将项目设置更改为指向生产数据库,而不是在第 3 步中重命名。此外,您可以跳过第 4 步。
【讨论】:
【参考方案3】:确保您已将现有迁移迁移到 db。 然后删除适用于特定应用的所有迁移并运行
python manage.py makemigrations
您将看到您的迁移被合并到一个名为 000initial.py 的文件中【讨论】:
以上是关于巩固 Django South Migrations的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Django 1.7 中创建 South 数据库模型
为啥 django-south 不包含在 django.contrib 中? [复制]