我正试图强制我的django项目始终使用严格的sql_mode
。除了在manage.py
中添加以下内容之外,还有其他方法吗?这似乎太复杂了。
def set_strict_sql_mode(sender, **kwargs):
from django.conf import settings
if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.mysql':
from django.db import connection
cursor = connection.cursor()
cursor.execute('SET session sql_mode=traditional')
from django.core.signals import request_started
request_started.connect(set_strict_sql_mode)
答案 0 :(得分:44)
实际上要求被证明是一只好橡皮鸭。在询问之后,我发现可以在OPTIONS
设置中提供自定义数据库DATABASES
,如下所示:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'sql_mode': 'traditional',
}
}
}
希望它对任何人都有帮助!
答案 1 :(得分:11)
您也可以尝试使用Database []
中的添加以下选项'OPTIONS': {
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
它的工作。
答案 2 :(得分:1)
https://docs.djangoproject.com/en/1.11/ref/databases/#mysql-sql-mode
设置sql_mode
从MySQL 5.7开始以及全新安装的MySQL 5.6,默认 sql_mode选项的值包含STRICT_TRANS_TABLES。该选项 当插入时数据被截断时,警告会升级为错误, 因此Django强烈建议您为MySQL激活严格模式以 防止数据丢失(STRICT_TRANS_TABLES或STRICT_ALL_TABLES)。
如果需要自定义SQL模式,则可以设置sql_mode 像其他MySQL选项一样的变量:在配置文件中或与 条目“ init_command”:“ SET sql_mode ='STRICT_TRANS_TABLES'” 数据库中数据库配置的OPTIONS部分。