Django-Settings-MySQL配置项解读

# /settings.py
# MySQL数据库配置项
MYSQL_OPTIONS = {
    # 使用严格模式TRADITIONAL插入数据
    'sql_mode': 'TRADITIONAL',
    'charset': 'utf8',
    'init_command': """
    SET default_storage_engine=INNODB;
    SET character_set_connection=utf8,collation_connection=utf8_unicode_ci;
    SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
    """
}

DATABASES = {
    'default': {
        'ENGINE': 'transaction_hooks.backends.mysql',
        'NAME': os.environ.get('DATABASE_NAME', 'ralph_ng'),
        'USER': os.environ.get('DATABASE_USER', 'ralph_ng'),
        'PASSWORD': os.environ.get('DATABASE_PASSWORD', 'ralph_ng') or None,
        'HOST': os.environ.get('DATABASE_HOST', '127.0.0.1'),
        'PORT': os.environ.get('DATABASE_PORT', 3306),
        'OPTIONS': MYSQL_OPTIONS,
        # 设置数据库交互方式为事务
        'ATOMIC_REQUESTS': True,
        'TEST': {
            'NAME': 'test_ralph_ng',
        }
    }
}

mysql5.0以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。
ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。
TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。
STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。
mysql_sql_mode链接


init_command
This sets the default storage engine upon connecting to the database. After your tables have been created, you should remove this option as it adds a query that is only needed during table creation to each database connection.
这将在连接到数据库时设置默认的存储引擎。在创建表之后,应删除此选项,因为它只在创建表时将需要的查询添加到每个数据库连接。
Q:有谁知道为什么有必要删除表后创建该选项?
A:通常,权限和设置是基于树的。你的会话设置将是一个指向默认设置的高于你的水平的指针。您的会话设置将会被创建,并且只在第一次连接时引用默认设置。
当你修改一个设置时,例如通过设置storage_engine的值,你要么创建所有设置的新副本,并改变一个值(如在Apache中),要么增加另一个层到解析时必须检入的树值。我不确定哪一个MySQL使用,但不管怎样,如果你不需要这个设置,你不应该每次往返都设置它。
如果你确实比较频繁地使用它,那么性能可能是值得的。PHP中出现类似的问题。你不想修改像PHP代码中的PHP包含路径这样的变量,这个变量用来增加大量的开销。
stackoverflow QA

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值