如何在 Django 的设置文件中指定多个“init_command”

Posted

技术标签:

【中文标题】如何在 Django 的设置文件中指定多个“init_command”【英文标题】:how can I specify multiple "init_command"s in Django's setup file 【发布时间】:2012-08-23 07:57:11 【问题描述】:

我对 Django 中的 mysql 数据库的连接进行了以下设置。

'default': 
    'NAME' : MYSQL_DB_NAME,
    #'ENGINE' : 'mysql',
    'ENGINE' : 'django.db.backends.mysql',
    'USER' : 'ccurvey',
    'PASSWORD' : MYSQL_PASSWORD,
    'HOST' : MYSQL_HOST,
    'PORT' : '',
    'OPTIONS' : 
        'init_command' : 'set storage_engine=INNODB',
        ,
    ,

到目前为止,一切都很好。

如果我想在我的“init_command”中添加另一个“set”命令,那么咒语是什么

        'init_command' : ('set storage_engine=INNODB',
                           'set transaction isolation level read committed'),

给我“connect() 参数必须是字符串,而不是元组”

        'init_command' : ('set storage_engine=INNODB; set transaction isolation level read committed;'),

给我

_mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now")

【问题讨论】:

【参考方案1】:

对我来说有效的是:

 'init_command': 'set storage_engine=InnoDB; \
                   set session transaction isolation level read committed'

【讨论】:

【参考方案2】:

不是:

 "init_command": 'set storage_engine=INNODB,    \
                  set transaction isolation level read committed;', 

它是:

 "init_command": 'set storage_engine=INNODB,    \
                  SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED', 

【讨论】:

@ChrisCurvey - 您不要在命令之间放置逗号,而是删除第二个 SET 并在值之间放置逗号。 IE。 SET name1=value1, name2=value2, ... 试过这个,但得到django.db.utils.OperationalError: (1193, "Unknown system variable 'TRANSACTION'") init_command 内容被提升为parameter on connection:连接到 MySQL 服务器时要执行的语句。如果发生重新连接,自动重新执行。 在将其包含在您的 django 代码中之前,您可以在命令级别尝试:mysql --init-command="SET @somevar:=100"【参考方案3】:

@ChrisCurvey 的解决方案对我来说没问题。

环境:Python3.7.3 + Django2.2.1

'OPTIONS': 
    'init_command': 'SET default_storage_engine=INNODB, sql_mode="STRICT_TRANS_TABLES" ',
    'charset': 'utf8mb4',
,

【讨论】:

以上是关于如何在 Django 的设置文件中指定多个“init_command”的主要内容,如果未能解决你的问题,请参考以下文章

使用 Django 的新 i18n_patterns:如何回退到设置模块中指定的默认语言?

尽管在设置中指定了日期格式,但 Django 在运行测试时给了我一个“无效的日期格式”错误

vba修改INI中指定的项

如何在 django 中指定索引类型? (btree 与哈希等)

如何在 django 中指定 login_required 重定向 url?

DJANGO:当主键不是“id”时如何在夹具中指定主键