将迁移应用到真正不同步的数据库

Applying migrations to a really out of sync database

我继承了一个状态非常糟糕的数据库。基本如下:

我不担心保留过去的迁移历史或类似的东西,但我确实需要保留数据库中当前的数据。我正在寻找一种方法来将当前数据库状态声明为初始状态并从那里继续前进。如有必要,我可以修改模型,使数据库 table 与当前模型匹配,因为我认为这是开始所必需的。

我已经为此纠结了几个小时,如果有任何建议可以解决这个问题,我将不胜感激。

补充说明:

南方的 django 1.6 说明

我建议下载数据库的转储(或在模式中)并使用 sqllite 在本地计算机上创建一个新数据库。

然后删除所有应用程序中现有的 /migrations 个文件夹 然后删除数据库中的所有内容 table south_migrations

现在禁用所有不在数据库中的 'new' 模型更改

然后再次进行初始迁移

./manage.py schemamigration myapp --initial

然后全部伪造,因为结构已经存在 ./manage.py migrate --fake

现在您的迁移已与您的生产数据库同步。

现在重新启用您的新模型更改,然后创建迁移每个应用程序 ./manage.py schemamigration myapp

然后迁移到新的变化 ./manage.py migrate

注意:在您的服务器和开发机器上,您需要确保在创建任何新迁移之前还删除 'migrations' 文件夹中的所有旧 .pyc 文件。

根据上面 e4c5 的评论,当您迁移到 django 1.7/1.8(因为 South 在 1.7 中集成到 Django 中)时,您将不得不再次执行其中一些步骤,因此您可能需要考虑升级到同时 1.7(虽然那不一定是微不足道的升级......)。