为数据库和模型定义之间的差异创建迁移,而不使用以前的迁移历史记录



我想从数据库的备份副本创建一个具有干净迁移历史记录的应用程序的新实例。这个想法是,我获得的迁移涵盖了数据库中的内容与我正在测试的应用程序存储库分支的模型定义之间的差异。

需要明确的是,我没有一组与数据库迁移历史记录匹配的现有py迁移文件,因此我希望将其全部吹走,然后只为这个特定分支生成迁移。

我可以从django_migrations表中删除各种应用程序行并删除迁移py文件,但事实证明,manage.py生成某种CREATE TABLE (or column) IF NOT EXISTS更加困难。

是否有自动方法可以执行此操作,或者我必须手动创建迁移文件?

我正在使用 django 1.11.2,postgres 9.5

所以我认为最简单的方法是手动检查模型定义及其数据库表示,然后伪造初始迁移并手动创建模型与数据库不同的新迁移:

$ manage.py inspectdb myapp_mymodel
$manage.py makemigrations myapp
$ # edit the migrations file to ensure it matches your db
$ manage.py migrate --fake myapp
$ # create a manual migration file to apply the changes
$ manage.py makemigrations --empty myapp
$ # edit the resulting file to add/remove fields as per the docs
$ # https://docs.djangoproject.com/en/1.11/ref/migration-operations/#addfield

最新更新