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

时间:2015-09-03 05:48:41

标签: django database-migration django-south django-1.6

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

  • 大多数应用没有迁移文件夹或者有过时的文件夹
  • 南迁移历史记录表与数据库不同步
  • 数据库表与Django中的当前模型不匹配(虽然我知道模型和表之间的变化)

我并不担心保留过去的迁移历史记录或类似内容,但我确实需要保留当前数据库中的数据。我正在寻找一种方法来声明当前数据库状态为初始状态并从那里向前移动。如果有必要,我可以修改模型,以便数据库表与当前模型匹配,因为我认为这是开始所必需的。

我已经乱搞了几个小时了,我很感激任何建议让你理顺这个。

附加说明:

  • 数据库正在使用sqlite
  • 移动到Django 1.8已经摆在桌面上但不会持续几个月

1 个答案:

答案 0 :(得分:1)

django 1.6 with South的说明

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

然后删除所有应用中的所有现有/migrations文件夹 然后删除数据库表south_migrations

中的所有内容

现在禁用所有不在数据库中的“新”模型更改

然后再次进行初始迁移

./manage.py schemamigration myapp --initial

然后假装一切,因为结构已经存在 ./manage.py migrate --fake

现在,您的迁移与生产数据库保持同步。

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

然后迁移到新的更改 ./manage.py migrate

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

根据e4c5上面的评论,当你转到django 1.7 / 1.8时,你将不得不再做一些这些步骤(因为南方已经在1.7中集成到了Django中),所以你可能要考虑升级到1.7以上同时(虽然这不一定是一个微不足道的升级......)。