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

标签 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': '',                      
   }
}

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

Ofc 我使用 json 文件进行迁移

python manage.py dumpdata --indent 2 --natural > dump.json
python manage.py loaddata dump.json

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

SET SQL_AUTO_IS_NULL = 0
SET foreign_key_checks=0

但一段时间后:

SELECT (1) AS `a` FROM `xxx` WHERE `xxx`.`id` = 8  LIMIT 1
SET foreign_key_checks=1

然后我看到异常。 Traceback 并不重要,因为它与外键有关,您可以在此处阅读更多内容

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

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

我试过了:

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

但正如我所说,它不起作用。

谁能帮忙...

最佳答案

你可以把它放在你的 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;",
    }

关于python - Django:如何将外键检查设置为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15793990/

相关文章:

python - 为什么 find_packages 行为取决于 pip 包的导入?

mySQL - 如果未找到字段,则返回 0 作为聚合结果

mysql - 在 mysql 中只选择唯一的行/记录

python - 在哪里放置 django-registration 激活 email.text 模板

python - Django:只允许一个 bool 字段为真

python - 为什么 django 提示我还没有设置我的引擎?

python - 将毫秒转换为小时、分钟和秒 python

Python:检查关键字是否出现在字符串中

python - 用python分隔逗号

php - PDO:fetchAll 分配数组变量