迁移到现有数据库而不匹配迁移

时间:2016-12-16 16:04:14

标签: django

我正在Django 1.9.8的网站上工作,我正在尝试将其更新版本部署到服务器上进行演示。

因为我在开发这个时学习Django,所以当我遇到数据库问题时,我犯了几次删除迁移并创建新迁移的错误。当我能够删除现有数据库时,这在我的dev上运行正常,但是在尝试将其部署到演示服务器上而不会丢失现有数据库数据时会出现问题。

我没有在演示服务器上迁移现有数据库架构,当我运行manage.py makemigration <myappname>时,它会为应用创建初始迁移。当我尝试运行manage.py migrate <myappname>时,它告诉我表已经存在(因为迁移正在尝试添加所有这些表,而不是对数据库进行必要的修改)。

有没有办法根据当前数据库创建初始迁移,然后我可以运行makemigrations来进行迁移,以便将当前数据库修改为与当前模型保持同步?

如果已经在某个地方回答了这个问题,我看起来并没有找到答案的幸运。

谢谢!

1 个答案:

答案 0 :(得分:1)

Django认为迁移已经运行,因为django_migrations表中有迁移条目。这就是django注册已经完成的迁移的地方。您需要进入postres并删除不需要的迁移行。这假设您的db模式与models.py匹配。如果存在差异,您需要手动编辑迁移文件以消除任何差异,或者修改models.py temporariliy以匹配。

psql [db name]
delete from django_migrations;

现在删除应用中的所有迁移文件夹并运行: ./manage.py migrate --fake-initial

如果编辑了models.py或迁移以匹配当前的数据库模式,并且您现在想要对差异运行迁移,请运行./manage.py makemigrations然后迁移

另见:Django 1.8: Create initial migrations for existing schema