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. 解决方 ...
随机推荐
- axios浏览器异步请求方法封装 XMLHttpRequest
axios学习笔记defaults(浏览器端异步请求处理方式) 浏览器异步请求方法封装,主要使用XMLHttpRequest lib/adapters/xhr.js //入口 var utils = ...
- unityUIMask
Mask: 与Image组件配合工作,根据Image的覆盖区域来定位显示范围,所有该Image的子级UI元素,超出此区域的部分会被隐藏(包括UI的交互事件) 实现原理: Mask会赋予Image一个特 ...
- ListView 实现进度条显示
代码参考互联网,本人在Win10 + Delphi 10.3.2 社区版中测试通过,现将测试通过的代码分享如下: unit Unit1; interface uses Winapi.Windows, ...
- 【LeetCode】145. Binary Tree Postorder Traversal
Difficulty: Hard More:[目录]LeetCode Java实现 Description https://leetcode.com/problems/binary-tree-pos ...
- AWS云创建EC2与使用注意事项-踩坑记录
目录 AWS 一 创建 EC2(云服务器) 二.AWS 注意事项 三.AWS 申请 SSL 证书 四. 创建VPC AWS 文章 GitHub 地址: 点我 AWS云服务器价格计算器 AWS WEB ...
- C# 身份证号码15位和18位验证
/// <summary> /// 身份证 /// </summary> [Serializable] public class IDCard { /// <su ...
- 代码语法高亮踩坑-原理,问题, PRE元素及htmlentity
语法高亮库基础原理 在研究使用能够在web页面上代码语法高显的解决方案时,发现有很多现成的开源库.比较中意的有prism.js,highlightjs.他们的原理基本上核心就两点: 1. 利用html ...
- elasticsearch原理学习
用es也差不多一年左右了,但是都是只会用,底层做了什么一窍不通,没有核心竞争力,循序渐进,一个一个攻破,理解的多了,读的多了,自然能力就上去了,es底层是基于lucene的,所以今天先从lucene下 ...
- webapi 返回类型
参考 大神;https://www.cnblogs.com/landeanfen/p/5501487.html
- Python常用模块大全(转)
os模块:os.remove() 删除文件 os.unlink() 删除文件 os.rename() 重命名文件 os.listdir() 列出指定目录下所有文件 os.chdir() 改变当前工作目 ...