将Django DB从SQLite迁移到MySQL的最佳方法是什么?

问题描述 投票:38回答:3

我需要将我的数据库从sqlite迁移到mysql,而各种工具/脚本对我来说太多了,无法轻松找到最安全,最优雅的解决方案。

这对我来说似乎很好http://djangosnippets.org/snippets/14/但似乎是3年以来获得更新令人担忧..

你能推荐一个已知Django 1.1.1可靠的解决方案吗?

mysql database django sqlite migration
3个回答
72
投票

执行:

python manage.py dumpdata > datadump.json

接下来,将settings.py更改为mysql数据库。

最后:

python manage.py loaddata datadump.json

36
投票

经过一番艰苦的搜索后,我遇到了几个问题,我希望未来的答案看起来会让人觉得有用

我的公式是

  1. python manage.py dumpdata > datadump.json
  2. 将settings.py更改为您的mysql
  3. 确保你可以连接你的mysql(权限等)
  4. python manage.py migrate --run-syncdb
  5. 在shell中使用此代码段排除内容类型数据 qazxsw poi qazxsw poi
  6. python manage.py shell

希望对您有所帮助!


0
投票

一个(更全面的)从sqlite迁移到MySQL所需的步骤列表,YMMV:

  1. python manage.py dumpdata> data dump.json
  2. 确保你可以连接你的mysql(权限等)
  3. 确保你有权限修改FOREIGN_KEY_CHECKS(我必须安装并运行我自己的私有mysql实例)
  4. 确保不使用InnoDB引擎(在每个表中使用MyISAM)或下一步不起作用(静默失败)!
  5. 通过此命令放松验证(这不会在InnoDB中生效):from django.contrib.contenttypes.models import ContentType ContentType.objects.all().delete() quit()
  6. 单独加载django_site.sql表(如果使用contrib.sites)
  7. 将settings.py更改为新的mysql
  8. python manage.py migrate --run-syncdb
  9. 修复sync​​db错误错误,根据需要修改Django应用程序和数据库表中的/ migrations目录中的代码
  10. 使用此代码段排除内容类型数据(可以将其放在主urls.py模块中):python manage.py loaddata datadump.json SET GLOBAL FOREIGN_KEY_CHECKS = 0; from django.contrib.contenttypes.models import ContentType
  11. 如果需要编辑json数据必须首先美化它:ContentType.objects.all().delete()
  12. python manage.py loaddata datadump.json
  13. 修复任何数据截断问题
  14. 将时区数据添加到数据库:quit() cat datadump.json | python -m json.tool > datadump_pretty.json
  15. 测试网站是否正常工作而不提交任何数据
  16. SET GLOBAL FOREIGN_KEY_CHECKS = 1;
  17. 测试其余部分
© www.soinside.com 2019 - 2024. All rights reserved.