在django中强制严格的sql模式

时间:2014-04-11 21:25:32

标签: python mysql django

我正试图强制我的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)

3 个答案:

答案 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部分。