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. 解决方 ...
随机推荐
- W5500嵌入式开发
W5500是韩国一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,W5500同时也是一颗工业级以太网控制芯片,最近发现我们国内也有和W5500 芯片一样芯片 介绍给大家 如下图:
- 问题追查:QA压测工具http长连接总是被服务端close情况
1. 背景 最近QA对线上单模块进行压测(非全链路压测),http客户端 与 thrift服务端的tcp链接总在一段时间被close. 查看服务端日志显示 i/o timeout. 最后的结果是: q ...
- RGB灯
robotbit扩展板4个rgb灯,r-红,g-绿,b-蓝,值为0~255,可模拟出256*256*256种颜色. from microbit import * import neopixel r = ...
- Phaser铁人三项
/** * 模拟铁人三项 */ public class PhaserTest { private static Random random = new Random(System.currentTi ...
- 参加AWS技术峰会的收获与思考
7月31日,我参加了AWS 技术峰会2019北京站的会议. 从厦门到帝都,奔赴千里,只为一场技术盛宴,我想记录一些收获和思考,才能不负此行. 大会议程全天,上午是主题演讲和行业解决方案展示,下午是技术 ...
- selenium登录爬取知乎出现:请求异常请升级客户端后重试的问题(用Python中的selenium接管chrome)
一.问题使用selenium自动化测试爬取知乎的时候出现了:错误代码10001:请求异常请升级客户端后重新尝试,这个错误的产生是由于知乎可以检测selenium自动化测试的脚本,因此可以阻止selen ...
- Centos 7.6 安装 oracle 10.2.0.1 数据库软件
step 1: 编辑 /etc/redhat-release :内容为redhat-4 step 2: 安装32位的软件包:yum install libXp.i686 libXt.i686 li ...
- .Net MVC伪静态实现
伪静态的好处就不多说了 这里说一下Mvc具体实现的方法 第一步 打开根目录的Web.config 给webServer 节点下的modules 添加属性runAllManagedModulesFo ...
- ionic 股票列表 网络读取数据,实现下拉刷新,上拉加载
html: <ion-header> <ion-toolbar> <ion-title> 股票 </ion-title> </ion-toolba ...
- iTextSharp生成pdf含模板(一)---制作pdf模板
参考地址:https://www.cnblogs.com/ibeisha/p/itextsharp-pdf.html 一.使用场景:在线填写一些信息,根据对应的信息生成奖状. 二.解决方案 1.新建w ...