Django:如何将外键检查设置为0

Sil*_*est 5 python mysql django django-models

好的,我正在将数据库从sqlite迁移到mysql,我几乎没有错误,但我已经解决了它们.现在我有这个选项的问题,因为我不知道如何禁用它.我试过了

DATABASES = {

 'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'slave',                     
    'USER': 'root',                     
    'PASSWORD': 'root',                 
    'OPTIONS': {
                "init_command": "SET foreign_key_checks = 0;",
           },
    'HOST': '',                    
    'PORT': '',                      
   }
}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,我不知道为什么.

我使用json文件进行迁移

python manage.py dumpdata --indent 2 --natural > dump.json
python manage.py loaddata dump.json
Run Code Online (Sandbox Code Playgroud)

当我在开始时加载数据时我可以看到:

SET SQL_AUTO_IS_NULL = 0
SET foreign_key_checks=0
Run Code Online (Sandbox Code Playgroud)

但是过了一段时间:

SELECT (1) AS `a` FROM `xxx` WHERE `xxx`.`id` = 8  LIMIT 1
SET foreign_key_checks=1
Run Code Online (Sandbox Code Playgroud)

然后我看到异常.回溯并不重要,因为它与外键相连,您可以在这里阅读更多内容

http://coffeeonthekeyboard.com/django-fixtures-with-circular-foreign-keys-480/

我知道我需要禁用此选项.

我试过了 :

http://djangosaur.tumblr.com/post/7842592399/django-loaddata-mysql-foreign-key-constraints

但就像我说它不起作用.

有人可以帮忙......

dno*_*zay 6

你可以把它放在你的结尾settings.py:

import sys
if 'loaddata' in sys.argv:
    # only change this for loaddata command.
    DATABASES['default']['OPTIONS'] = {
       "init_command": "SET foreign_key_checks = 0;",
    }
Run Code Online (Sandbox Code Playgroud)