如何在 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 在运行测试时给了我一个“无效的日期格式”错误
如何在 django 中指定索引类型? (btree 与哈希等)