将Django 1.4应用程序的数据库迁移到Django 1.8版本

时间:2016-02-22 10:53:09

标签: django django-models django-migrations

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

有人可以提出一些不错的选择吗?

感谢。

1 个答案:

答案 0 :(得分:2)

需要预读

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

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

使用入门

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

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

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

然后我会测试所有迁移实际上都在空白数据库上运行。 这些是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(假设您之前安装过它)
  3. 我确定上面有几个漏洞,但希望这能为您提供您需要做的事情。