将迁移应用到真正不同步的数据库
Applying migrations to a really out of sync database
我继承了一个状态非常糟糕的数据库。基本如下:
- 大多数应用没有迁移文件夹或有过时的文件夹
- 南迁历史table与数据库不同步
- 数据库 tables 与 Django 中的当前模型不匹配(虽然我知道模型和 tables 之间发生了什么变化)
我不担心保留过去的迁移历史或类似的东西,但我确实需要保留数据库中当前的数据。我正在寻找一种方法来将当前数据库状态声明为初始状态并从那里继续前进。如有必要,我可以修改模型,使数据库 table 与当前模型匹配,因为我认为这是开始所必需的。
我已经为此纠结了几个小时,如果有任何建议可以解决这个问题,我将不胜感激。
补充说明:
- 数据库正在使用sqlite
- 迁移到 Django 1.8 是在 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(虽然那不一定是微不足道的升级......)。
我继承了一个状态非常糟糕的数据库。基本如下:
- 大多数应用没有迁移文件夹或有过时的文件夹
- 南迁历史table与数据库不同步
- 数据库 tables 与 Django 中的当前模型不匹配(虽然我知道模型和 tables 之间发生了什么变化)
我不担心保留过去的迁移历史或类似的东西,但我确实需要保留数据库中当前的数据。我正在寻找一种方法来将当前数据库状态声明为初始状态并从那里继续前进。如有必要,我可以修改模型,使数据库 table 与当前模型匹配,因为我认为这是开始所必需的。
我已经为此纠结了几个小时,如果有任何建议可以解决这个问题,我将不胜感激。
补充说明:
- 数据库正在使用sqlite
- 迁移到 Django 1.8 是在 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(虽然那不一定是微不足道的升级......)。