2016-02-07 85 views
2

我想从sqlite3迁移到Django中的MySQL。首先,我用下面的命令:在Django中迁移到mysql

python manage.py dumpdata > datadump.json 

然后我改变了我的Django应用程序的设置,并与我的新的MySQL数据库配置它。最后,我用下面的命令:

python manage.py loaddata datadump.json 

,但我得到这个错误:

integrityError: Problem installing fixtures: The row in table 'django_admin_log' with primary key '20' has an invalid foregin key: django_admin_log.user_id contains a value '19' that does not have a corresponding value in auth_user.id.

+0

正确地检查你的foreign_key约束。 –

回答

1

你有一致性错误在你的数据,django_admin_log表是指AUTH_USER不存在。 sqlite不强制外键约束,但MySQL。你需要修复数据,然后你可以将它导入到MySQL中。

+0

我应该如何解决这个问题,有没有什么工具可以帮助我? –

+0

从错误消息中,您可以尝试从ID为20的django_admin_log行删除并重复迁移。你可以在sqlite数据库中做到这一点,或者你可以编辑json转储。您还可以使用'SELECT id FROM django_admin_log WHERE user_id NOT IN(SELECT id FROM auth_user)'查找所有无效行' –

0

我不得不将我的数据库从postgres移动到MySql数据库。

这为我工作:

出口(旧机):

python manage.py dumpdata --natural --all --indent=2 --exclude=sessions --format=xml > dump.xml 

导入(全新机): (请注意,旧版本的Django的,你需要执行syncdb代替迁移)

manage.py migrate --no-initial-data 

获得SQL重置数据库:

manage.py sqlflush 

setting.py:

DATABASES = { 
'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'asdf', 
     'USER': 'asdf', 
     'PASSWORD': 'asdf', 
     'HOST': 'localhost', 
    #IMPORTANT!! 
    'OPTIONS': { 
      "init_command": "SET foreign_key_checks = 0;", 
     }, 
} 

python manage.py loaddata dump.xml