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

Posted

技术标签:

【中文标题】迁移到现有数据库而不匹配迁移【英文标题】:Migrating to existing database without matching migration 【发布时间】:2017-05-02 11:24:54 【问题描述】:

我正在使用 Django 1.9.8 开发网站,并尝试将其更新版本部署到服务器以进行演示。

由于我在开发此工具时一直在学习 Django,因此在遇到数据库问题时,我犯了几次删除迁移并创建新迁移的错误。当我能够删除现有数据库时,这在我的开发人员上运行良好,但在尝试将其部署在演示服务器上而不丢失现有数据库数据时会导致问题。

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

有没有一种方法可以根据当前数据库创建初始迁移,然后我可以运行 makemigrations 来获取将修改当前数据库以与当前模型保持同步的迁移?

抱歉,如果这已经在某个地方得到了回答,我已经看过并且没有运气找到答案。

谢谢!

【问题讨论】:

查看 django 文档的这一部分:docs.djangoproject.com/en/1.10/howto/legacy-databases 这可能会对您有所帮助 您的代码肯定在版本控制中,但是?您不能只恢复删除迁移的更改吗? 【参考方案1】:

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

psql [db name]
delete from django_migrations;

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

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

也看这里:Django 1.8: Create initial migrations for existing schema

【讨论】:

以上是关于迁移到现有数据库而不匹配迁移的主要内容,如果未能解决你的问题,请参考以下文章

记一次从oracle到hive的历史数据迁移

将 s-s-rS 报告迁移到 AZURE VM,而不迁移本地 SQL 数据库。可能吗?

iOS:将现有核心数据数据库迁移到 iCloud

MongoDB 将所有现有索引迁移到新数据库

将 EF Core 迁移添加到现有数据库,同时仍允许从头开始创建数据库

如何将现有 Azure 资产迁移到 Azure 应用服务