Django MySQL 数据库连接
常规说明
数据库连接
CONN_MAX_AGE 定义数据库连接时限(ALL)
default:0 保存在每个请求结束时关闭数据库连接的历史行为。
None:保持长连接
Other:xx 单位秒
连接管理
Django连接发生在每次请求时,如果没有可用连接便主动建立连接,如果限制了连接时间的话。
警告
- 每个线程包含自己的数据库连接,数据库必须支持至少和工作线程一样多的同步连接;
- 有时出现大多数视图无法访问数据库,此时应当试图减少数据库保持连接时间,这样不会有意地维护连接,同时有助于减少数据库同步连接数;
- 开发服务器会为每个处理的连接创立新的线程,会使长连接失效;
- 当Django建立一个连接时会设置适当的参数(取决于被使用的后端),如果使能长连接,这些设置便不会在每个请求重复设置,但是如果你定义了比如连接隔离或时区,就应在每次连接断开后还原默认配置,强制写入适当的值或者禁用长连接。
编码
Django 默认假设所有数据库均采用UTF-8编码。
MySQL连接说明
版本说明
支持MySQL 5.5+,期望数据库支持UTF-8编码和事务和参照完整性。
数据库存储引擎
推荐引擎---InnoDB
MySQL数据库API驱动
MySQLdb 原生驱动已被开发支持超过10年(不支持Python3);
mysqlclient MySQLdb的衍生,支持Python3(Django MySQL推荐API);
mysqlclient 1.3.3+,推荐此API
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 排序稍慢相对准确
连接数据库
连接设置采用优先顺序:
- OPTIONS选项
- NAME,USER,PASSWORD,HOST,PORT
- 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 数据库连接的更多相关文章
- Django 使用 mysql 数据库连接
启用 mysql 数据库连接 修改 app01 下的 __init__.py import pymysql pymysql.install_as_MySQLdb() 修改 settings.py DA ...
- 通过CONN_MAX_AGE优化Django的数据库连接
上周对我们用Django+Django-rest-framework提供的一套接口进行了压力测试.压测的过程中,收到DBA通知——数据库连接数过多,希望我们优化下程序.具体症状就是,如果设置mysql ...
- admin配置与Mysql数据库连接
admin配置管理数据库的框架:web版的数据库管理页面初始化数据库: python manage.py makemigrations python manage.py migrate启动项目:(创建 ...
- Python MySQL 数据库连接不同方式
PyMySQL 驱动连接 什么是 PyMySQL?PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. PyMySQL 遵循 P ...
- Python Web实战:Python+Django+MySQL实现基于Web版的增删改查
前言 本篇使用Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web,少走弯路.效果演示在项目实战最 ...
- Ubuntu14.04 Django Mysql安装部署全过程
Ubuntu14.04 Django Mysql安装部署全过程 一.简要步骤.(阿里云Ubuntu14.04) Python安装 Django Mysql的安装与配置 记录一下我的部署过程,也方便 ...
- 一个简单的MySql数据库连接池的实现
package cn.hc.connectionPool; import java.io.IOException; import java.io.InputStream; import java.sq ...
- Ubuntu 14.04下Django+MySQL安装部署全过程
一.简要步骤.(Ubuntu14.04) Python安装 Django Mysql的安装与配置 记录一下我的部署过程,也方便一些有需要的童鞋,大神勿喷~ 二.Python的安装 由于博主使用的环境是 ...
- 报表开发工具中mysql数据库连接编码转化失效解决方案
1. 问题描述 在报表开发工具FineReport中,mysql数据库连接通过数据连接编码转换进行编码的转换,在通过报表录入往数据库中录入中文数据的时候,总是出现乱码,这个该怎么解决呢? 2. 解决方 ...
随机推荐
- HTML连载29-div和span标签
一.div标签 1.作用:一般用于配合CSS完成网页的基本布局 2.例子: <style> .head{ width: 980px; height: 100px; background: ...
- 使用Django创建RESTful API
Agenda 1.What is an api Api refers to application programming interface It is a set of subroutine de ...
- 容斥原理--计算并集的元素个数 URAL 1091
在计数时,必须注意没有重复,没有遗漏.为了使重叠部分不被重复计算,人们研究出一种新的计数方法,这种方法的基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计 ...
- 如何将云上的Linux文件自动备份到本地服务器
需求场景: 将云上一台Linux服务器文件备份到本地服务器,一周一备即可. 面对这样一个需求,我们可能面临下列几个问题, 备份方式:是云服务器推文件到本地服务器写入,还是本地服务器从云服务器拉文件?这 ...
- fancybit个人简介
程序员一枚 熟悉C C++ C# js lua等多种常见开发语言 熟悉Unity游戏开发 node.js pomelo和C# scut 网游后端框架 做过.net和php网站后端 二次元文化爱好者 有 ...
- 【C#常用方法】2.DataTable(或DataSet)与Excel文件之间的导出与导入(使用NPOI)
DataTable与Excel之间的互导 1.项目添加NPOI的引用 NPOI项目简介: NPOI是一个开源的C#读写Excel.WORD等微软OLE2组件文档的项目,特点是可以在没有安装Office ...
- 【C#】Winform 令人困擾的畫面閃爍問題解法
DoubleBuffered = true 如果 Control 沒有這個屬性,可以使用我下列擴充函式進行設定︰ public static void SetDoubleBuffered<T&g ...
- VirtualBox安装Ubutu出错
今天打算装个虚拟机玩玩,这次没有选择VM.感觉那东西各种破解有点麻烦而且体积也不小呀,所以,这次我选择了稍微点的的VirtualBox. 一路安装虚拟机没有问题,安装完后新建虚拟机都正常,可在启动虚拟 ...
- 【开发笔记】- 输出String字符串使其文本对齐
需求 一段文本做每64个字节换行处理,并添加对应的头尾注释 代码实现 public static String certFormat(String code, String beginTitle, S ...
- 添加shiv让所有现代浏览器都支持 HTML5 语义元素 html5.js让IE(包括IE6)支持HTML5元素方法
引用Google的html5.js文件 <!--[if IE]> <script src=”http://html5shiv.googlecode.com/svn/trunk/htm ...