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

时间:2010-06-14 04:07:56

标签: mysql database django sqlite migration

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

这对我来说似乎很不错http://djangosnippets.org/snippets/14/但是在获得令人担忧的更新后似乎还有3年......

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

4 个答案:

答案 0 :(得分:72)

执行:

python manage.py dumpdata > datadump.json

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

最后:

python manage.py loaddata datadump.json

答案 1 :(得分:35)

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

我的公式是

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

    python manage.py migrate --run-syncdb

    python manage.py shell

  6. from django.contrib.contenttypes.models import ContentType ContentType.objects.all().delete() quit()

  7. 希望能帮到你!

答案 2 :(得分:0)

从sqlite迁移到MySQL,YMMV所需的步骤(更完整)列表:

  1. python manage.py dumpdata> datadump.json
  2. 确保您可以连接mysql(权限等)
  3. 确保您具有修改FOREIGN_KEY_CHECKS的权限(为此我必须安装并运行自己的mysql私有实例)
  4. 确保未使用InnoDB引擎(在每个表中使用MyISAM),否则下一步将无法工作(无提示失败)!
  5. 通过此命令放松验证(这在InnoDB中不会生效): SET GLOBAL FOREIGN_KEY_CHECKS = 0;
  6. 单独加载django_site.sql表(如果使用contrib.sites)
  7. 将settings.py更改为新的mysql
  8. python manage.py migration --run-syncdb
  9. 通过根据需要修改Django应用的/ migrations目录和数据库表中的代码来修复sync​​db错误错误
  10. 使用此代码段排除contentype数据(可以将其放入主urls.py模块中): from django.contrib.contenttypes.models import ContentType ContentType.objects.all().delete() quit()
  11. 如果需要编辑json数据,则必须首先对其进行美化: cat datadump.json | python -m json.tool > datadump_pretty.json
  12. python manage.py loaddata datadump.json
  13. 解决所有数据截断问题
  14. 将时区数据添加到数据库: mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -D mysql -P 1234 -u root -p --protocol=tcp mysql -P 1234 -u root -p -e "flush tables" --protocol=tcp
  15. 测试网站是否在不提交任何数据的情况下
  16. SET GLOBAL FOREIGN_KEY_CHECKS = 1;
  17. 测试其余部分

答案 3 :(得分:0)

这是避免其他地方描述的ContentType问题的更整洁的方式:

./manage.py dumpdata --exclude contenttypes --exclude auth.permission --exclude sessions --indent 2 > dump.json

然后:

./manage.py loaddata dump.json