我们已成功将Django 1.4应用程序迁移到Django 1.8。在我们使用Django 1.8之前,Django 1.4版本的应用程序仍在使用中。问题是生产服务器上的大量数据已经更新,需要迁移到1.8版本。除了手动执行此操作之外,有什么方法可以将数据从1.4的数据库迁移到1.8?请注意,版本中的模型/数据库列都不同。
有人可以提出一些不错的选择吗?
感谢。
答案 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后运行这些迁移命令。
成功完成后
我确定上面有几个漏洞,但希望这能为您提供您需要做的事情。