【问题标题】:Migrate Database of Django 1.4 application to Django 1.8 version将 Django 1.4 应用程序的数据库迁移到 Django 1.8 版本
【发布时间】:2016-06-03 18:23:46
【问题描述】:

我们已成功将 Django 1.4 应用程序迁移到 Django 1.8。 Django 1.4 版本的应用程序仍在生产中使用,直到我们使用 Django 1.8。问题是生产服务器上的大量数据已经更新,需要迁移到 1.8 版。有什么方法可以将数据从 1.4 的数据库迁移到 1.8,除非手动执行此操作?请注意,两个版本中的模型/数据库列是不同的。

谁能推荐一些好的选择?

谢谢。

【问题讨论】:

  • 这没有意义:问题是生产服务器上的大量数据已经更新,需要在本地环境中迁移到 1.8 版本。 - 我想你的意思是你的本地环境在 1.8 上,生产在 1.4 上,对吗?
  • 您是否手动重命名了数据库中的任何列或表?
  • 是的,卢克,没错。在本地我有 1.8 和生产它是 1.4。不,我没有重命名任何列,但您可能知道模型结构在 1.8 中已更改,因此数据库也已更改。希望这是有道理的。谢谢。
  • 当您说“模型结构已更改”时,您实际上是否更改了任何模型?即,您是否编辑了任何 models.py 文件中的任何模型字段?
  • 是的,有些型号。请进一步指导我什么是最好的方法?

标签: django django-models django-migrations


【解决方案1】:

必读

Django 迁移: https://docs.djangoproject.com/en/1.8/ref/django-admin/#makemigrations-app-label

假设您使用的是 South: https://docs.djangoproject.com/en/1.8/topics/migrations/#upgrading-from-south

开始

首先转储您的本地数据库,我更喜欢为此使用 mysql/postgres/whatever 文档,而不是使用 ./manage.py 转储数据。

您还需要转储您的生产数据库,以便妥善保管。

接下来在您的本地环境中,我将转储数据库并创建一个新数据库。

然后我会测试你的所有迁移是否真的在一个空白数据库上工作。 这些是 django 1.8 的说明

./manage.py makemirgrations

./manage.py migrate

如果任何迁移处于从空白状态运行的不一致状态,这将有助于显示。如果您遇到任何错误,应先修复它们。

鉴于可行,现在我将测试您的迁移是否确实适用于您的生产数据。

所以删除你的本地数据库,创建一个新的,然后加载生产转储。

如果表已正确配置(即它们在您的生产数据库中处于最新状态),那么您将需要伪造所有迁移。

./manage.py migrate --fake <appname>

但是,鉴于您在本地环境中升级到 1.8 后更改了一些模型,那么您可能只需要伪造一些迁移。这可能是棘手的部分,具体取决于您升级的时间和创建迁移的时间。

因为 django 1.7 只会为每个应用程序创建一个初始迁移,所以您可能需要实际分解某些应用程序的迁移。也就是说,您可能需要手动将该迁移分解为 2 个组件,而不是 0001_initial: 1. 迁移以匹配生产数据库的当前状态 2. 迁移以匹配您从那时起对模型所做的任何其他更改。

一种方法是在 django 1.8 在本地正常工作后检查你的第一次提交,然后运行

./manage.py makemigrations

然后提交

然后继续你的最新提交,然后运行

./manage.py makemigrations

现在您应该在升级到 django 1.8 后修改的每个应用中进行 2 次以上的迁移。

然后,您可以在那些为 django 1.8 进行 2 次以上新迁移的应用上伪造初始值

./manage.py migrate --fake-initial app1 app2

剩下的只是

./manage.py migrate app3 app4

现在运行您的测试以确认一切都在本地运行。

如果您更改了迁移,您将再次需要在本地针对空白数据库进行测试,以测试它们是否正常运行

一旦工作正常,记录您使用的“迁移”命令 - 然后将您的应用部署到生产环境,并在您的服务器上升级到 django 1.8 后仅运行这些迁移命令。

成功完成后

  1. 获取本地和生产数据库的新转储
  2. 从本地和生产环境中卸载 South(假设您之前已安装)

我确信上面有几个漏洞,但希望这能给你提供你需要做什么的要点。

【讨论】:

  • 非常感谢您的详细解答。我会尝试以上所有,让你知道。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2015-09-10
  • 2015-09-11
  • 2015-09-12
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
  • 2015-03-21
  • 2015-09-08
相关资源
最近更新 更多