Django 1.11 官方文档

常规说明

数据库连接

CONN_MAX_AGE 定义数据库连接时限(ALL)

default:0 保存在每个请求结束时关闭数据库连接的历史行为。

None:保持长连接

Other:xx 单位秒

连接管理

Django连接发生在每次请求时,如果没有可用连接便主动建立连接,如果限制了连接时间的话。

警告
  1. 每个线程包含自己的数据库连接,数据库必须支持至少和工作线程一样多的同步连接;
  2. 有时出现大多数视图无法访问数据库,此时应当试图减少数据库保持连接时间,这样不会有意地维护连接,同时有助于减少数据库同步连接数;
  3. 开发服务器会为每个处理的连接创立新的线程,会使长连接失效;
  4. 当Django建立一个连接时会设置适当的参数(取决于被使用的后端),如果使能长连接,这些设置便不会在每个请求重复设置,但是如果你定义了比如连接隔离或时区,就应在每次连接断开后还原默认配置,强制写入适当的值或者禁用长连接。

编码

Django 默认假设所有数据库均采用UTF-8编码。

MySQL连接说明

版本说明

支持MySQL 5.5+,期望数据库支持UTF-8编码和事务和参照完整性。

数据库存储引擎

推荐引擎---InnoDB

MySQL数据库API驱动

  1. MySQLdb 原生驱动已被开发支持超过10年(不支持Python3);

  2. mysqlclient MySQLdb的衍生,支持Python3(Django MySQL推荐API);

    mysqlclient 1.3.3+,推荐此API

  3. MySQL Connector/Python 纯Python驱动(Oracle,支持Python3),无须MySQL客户端库和Python其他标准库;

    MySQL connector/Python 1.1.X+

时区定义

使用Django 时区支持,mysql_tzinfo_to_sql加载时区表至MySQL数据库。

创建数据库(支持UTF-8)

SQL语句:

CREATE DATABASE <dbname> CHARACTER SET utf8;

排序规则

排序规则用于列序控制,可以设置数据库范围级别或单独表/单独列级别的排序规则,Django不提供模型设置排序,可手动修改数据库表进行修改。

默认utf-8数据库,MySQL采用utf8_general_ci排序规则(默认大小写不敏感,插入‘a’和‘A’会视为一样),如果想区分大小写,请采用utf8_bin排序规则。

utf8_general_ci 排序快有一些误差

utf8_unicode_ci 排序稍慢相对准确

连接数据库

连接设置采用优先顺序:

  1. OPTIONS选项
  2. NAME,USER,PASSWORD,HOST,PORT
  3. MySQL配置
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': '/path/to/my.cnf',
},
}
} # my.cnf
[client]
database = NAME
user = USER
password = PASSWORD
default-character-set = utf8

设置sql_mode

STRICT_TRANS_TABLES/STRICT_ALL_TABLES

Django 强烈建议激活strict mode(此模式会将插入时的truncate警告升级为错误,以此来防止数据丢失)

隔离等级Isolation level

当运行并发负载时,数据库会处理不同的回话可能会相互影响。相互影响方式由每个回话的处理隔离等级决定。在数据库配置文件OPTIONS中设置isolation_level,有效的设置值如下:

  • 'read uncommitted'
  • 'read comitted'
  • 'repeatable read'
  • 'serializable'
  • 'None'

Django 在'read committed'工作好于MySQL默认'repeatable read'。

创建表

提前设置好数据库存储引擎

表名

推荐使用小写

特殊区域注意事项

字符域

字符域默认为最大255字符,如果使用unique=True将会影响字符域。

TextField 限制

TextField不能标记为 unique=True

小数秒在Time和DataTime Field被支持

要求MySQL 5.6.4+

TIMESTAMP 列

如果数据库包含TIMESTAMP列,必须设置USE_TZ = False来避免冲突,如果你使能为True,则inspectdb会映射这些列到DateTimeField,MySQL和Django都将会尝试从UTC到local time转换这些值。

Row locking with QuerySet.select_for_update()

MySQL不支持NOWAIT和SKIP LOCKED,

故select_for_update() is used with nowait=True or skip_locked=True then a DatabaseError will be raised.

自动类型转换可能会导致非预期的结果

Django MySQL 数据库连接的更多相关文章

  1. Django 使用 mysql 数据库连接

    启用 mysql 数据库连接 修改 app01 下的 __init__.py import pymysql pymysql.install_as_MySQLdb() 修改 settings.py DA ...

  2. 通过CONN_MAX_AGE优化Django的数据库连接

    上周对我们用Django+Django-rest-framework提供的一套接口进行了压力测试.压测的过程中,收到DBA通知——数据库连接数过多,希望我们优化下程序.具体症状就是,如果设置mysql ...

  3. admin配置与Mysql数据库连接

    admin配置管理数据库的框架:web版的数据库管理页面初始化数据库: python manage.py makemigrations python manage.py migrate启动项目:(创建 ...

  4. Python MySQL 数据库连接不同方式

    PyMySQL 驱动连接 什么是 PyMySQL?PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. PyMySQL 遵循 P ...

  5. Python Web实战:Python+Django+MySQL实现基于Web版的增删改查

    前言 本篇使用Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web,少走弯路.效果演示在项目实战最 ...

  6. Ubuntu14.04 Django Mysql安装部署全过程

    Ubuntu14.04 Django Mysql安装部署全过程   一.简要步骤.(阿里云Ubuntu14.04) Python安装 Django Mysql的安装与配置 记录一下我的部署过程,也方便 ...

  7. 一个简单的MySql数据库连接池的实现

    package cn.hc.connectionPool; import java.io.IOException; import java.io.InputStream; import java.sq ...

  8. Ubuntu 14.04下Django+MySQL安装部署全过程

    一.简要步骤.(Ubuntu14.04) Python安装 Django Mysql的安装与配置 记录一下我的部署过程,也方便一些有需要的童鞋,大神勿喷~ 二.Python的安装 由于博主使用的环境是 ...

  9. 报表开发工具中mysql数据库连接编码转化失效解决方案

    1. 问题描述 在报表开发工具FineReport中,mysql数据库连接通过数据连接编码转换进行编码的转换,在通过报表录入往数据库中录入中文数据的时候,总是出现乱码,这个该怎么解决呢? 2. 解决方 ...

随机推荐

  1. IntelliJ IDEA 超实用使用技巧分享

    https://blog.csdn.net/weixin_38405253/article/details/102583954 知识点概览: 高效率配置 日常使用 必备快捷键(★★) 查找 跳转切换 ...

  2. 【转帖】分布式事务之解决方案(XA和2PC)

    分布式事务之解决方案(XA和2PC) https://zhuanlan.zhihu.com/p/93459200 ​ 博彦信息技术有限公司 java工程师 3. 分布式事务解决方案之2PC(两阶段提交 ...

  3. 【题解】Diferenc-Diferencija [SP10622]

    [题解]Diferenc-Diferencija [SP10622] 传送门:\(\text{Diferenc-Diferencija}\) \(\text{[SP10622]}\) [题目描述] 序 ...

  4. git 命令从入门到放弃

    o(︶︿︶)o  由于项目使用 git 作为版本控制工具,自己可以进行一些常用操作但是有时候还是会忘掉,导致每次遇到 git 命令的使用问题时就要再查一遍,效率就立马降下来了,所以今天就来一个从头到尾 ...

  5. 我是如何一步步编码完成万仓网ERP系统的(六)产品库设计 2.百度Ueditor编辑器

    https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...

  6. ORA-03113: 通信通道的文件结束解决方法一例

    开发项目时,使用的是Oracle数据库.最近遇到了“ORA-03113: 通信通道的文件结束”错误.如下图所示: 经过网上查资料和请教同事,终于找到了解决ORA-03113错误的办法. 解决步骤如下: ...

  7. Delphi - 鼠标上下滚动基础消息事件

    Delphi实现对鼠标上下滚动基础消息的截获并处理 前几天有客户提出需求:由于个人PC界面限制,有时候电子图档显示不全,希望通过鼠标上下滚动用来控制电子图档的放大和缩小. 下面通过一个测试Demo来说 ...

  8. 攻防世界-web -高手进阶区-PHP2

    题目 首先发现源码泄露 /index.phps 查看源代码 即: <?php if("admin"===$_GET[id]) { echo("<p>no ...

  9. Mysql查漏补缺笔记

    目录 查漏补缺笔记2019/05/19 文件格式后缀 丢失修改,脏读,不可重复读 超键,候选键,主键 构S(Stmcture)/完整性I(Integrity)/数据操纵M(Malippulation) ...

  10. my97Date如何多选日期且无重复日期

    最终的效果是: 首先引用my97Date的js WdatePicker.js html代码 <textarea cols="" name="txtNoUseDate ...