2016-02-07 86 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