django - MySQL 严格模式,设置中有数据库 url

Posted

技术标签:

【中文标题】django - MySQL 严格模式,设置中有数据库 url【英文标题】:django - MySQL strict mode with database url in settings 【发布时间】:2018-03-08 13:33:12 【问题描述】:

我在我的设置中使用了一个数据库 URL 字符串,例如:

DATABASES = 
    'default': "mysql://root:@localhost:3306/mydb"

当我迁移时,我收到以下警告:

MySQL Strict Mode is not set for database connection 'default'

现在我的问题是:我怎样才能将这两件事结合起来?

我无法使用“常规”方式通过字典设置数据库设置,因为我的数据库 url 来自环境变量。

提前谢谢!

【问题讨论】:

你试过dj-database-url可以帮助你吗? @BearBrown 可能会工作,但不使用其他插件就没有办法吗? 我觉得不行,只要你加sn-p,但它会是插件的类似代码。 【参考方案1】:

之后您可以更新您的设置:

DATABASES['default']['OPTIONS'] = 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'"

【讨论】:

【参考方案2】:

我想这个会帮助你。 您可以将 options 作为 URL 中的查询字符串传递

DATABASES = 
    'default': dj_database_url.config(default="mssql://USER:PASSWORD@HOST:PORT/NAME?init_command=SET sql_mode='STRICT_TRANS_TABLES'&charset=utf8mb4", conn_max_age=500)

【讨论】:

【参考方案3】:
DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'USER': 'root',
        'PASSWORD': 'test123',
        'OPTIONS': 
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
            'charset': 'utf8mb4',
        
    

尝试在settings.py中给出数据库选项的init_command 如果想了解更多请参考文档django_mysql.W001: Strict Mode

【讨论】:

thx 输入,但正如我在我的问题中所说,我不能使用字典,我必须坚持使用 url 字符串。有什么想法吗? 对不起,我不明白你的意思。 见@vijay 回答

以上是关于django - MySQL 严格模式,设置中有数据库 url的主要内容,如果未能解决你的问题,请参考以下文章

hive的严格模式和分区

关于mysql严格模式的开启关闭

在迁移到 SQL Server 2008 之前将 MySQL SQL 模式设置为更严格

如何全局启用mysql严格模式并保持开启状态?

MYSQL SQL模式 (未完成)

laravel 项目本地版本为5.5,线上mysql 为5.7.21版本,执行严格模式