巩固 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的主要内容,如果未能解决你的问题,请参考以下文章

Django1.6版本的PG数据库定义手动升级

无法在 Django 1.7 中创建 South 数据库模型

为啥 django-south 不包含在 django.contrib 中? [复制]

使用 Django/South 重命名模型的最简单方法?

PostgreSQL + Django + South 的第一步

目前使用 Django “Evolution”,“South”是不是更好,值得切换?