python 数据库连接池_【转】Python 数据库连接池
python编程中可以使用pymysql进行数据库连接及增删改查操作,但每次连接mysql请求时,都是独立的去请求访问,比较浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响。因此实际使用中,通常会使用数据库的连接池技术,来访问数据库达到资源复用。
python的数据库连接池包:DBUtils
DBUtils提供两种外部接口:
PersistentDB:提供线程专用的数据库连接,并自动管理连接。
PooledDB:提供线程间可共享的数据库连接,并自动管理连接。
DBUtils包安装: pip3 install DBUtils
或者下载 DBUtils 安装包,解压后,使用python setup.py install 命令进行安装
未使用连接池的数据库方法:
def getconn(host, user, passwd, db, sql, port=3306,charset='utf8'):
2 conn = pymysql.connect(host=host, user=user, passwd=passwd, port=port, db=db, charset=charset) #建立连接
3 cur = conn.cursor(cursor=pymysql.cursors.DictCursor) #建立游标并指定游标类型
4 cur.execute(sql) #执行sql
5 if sql.startswith('select'): #判断sql是否是select
6 res = cur.fetchone()
7 else:
8 conn.commit() #insert\delete\update语句执行完毕后需要进行commit
9 res = 88
10 cur.close() #关闭游标
11 conn.close() #关闭连接
12 return res
用数据库连接池后的方法:
import MySQLdb
from DBUtils.PooledDB import PooledDB
pool = PooledDB(MySQLdb,5,host='localhost',user='root',passwd='pwd',db='myDB',port=3306) #5为连接池里的最少连接数
conn = pool.connection() #以后每次需要数据库连接就是用connection()函数获取连接就好了
cur=conn.cursor()
SQL="select * from table1"
r=cur.execute(SQL)
r=cur.fetchall()
cur.close()
conn.close()
下面利用pymysql 和 DBUtils 建立自己的mysql 数据库连接工具包
class OPMysql(object):
__pool = None
def __init__(self):
# 构造函数,创建数据库连接、游标
self.coon = OPMysql.getmysqlconn()
self.cur = self.coon.cursor(cursor=pymysql.cursors.DictCursor)
# 数据库连接池连接
@staticmethod
def getmysqlconn():
if OPMysql.__pool is None:
__pool = PooledDB(creator=pymysql, mincached=1, maxcached=20, host=mysqlInfo['host'], user=mysqlInfo['user'], passwd=mysqlInfo['passwd'], db=mysqlInfo['db'], port=mysqlInfo['port'], charset=mysqlInfo['charset'])
print(__pool)
return __pool.connection()
# 插入\更新\删除sql
def op_insert(self, sql):
print('op_insert', sql)
insert_num = self.cur.execute(sql)
print('mysql sucess ', insert_num)
self.coon.commit()
return insert_num
# 查询
def op_select(self, sql):
print('op_select', sql)
self.cur.execute(sql) # 执行sql
select_res = self.cur.fetchone() # 返回结果为字典
print('op_select', select_res)
return select_res
#释放资源
def dispose(self):
self.coon.close()
self.cur.close()
配置文件mysqlinfo,包含数据库的连接信息、用户名密码等:
mysqlInfo = {
"host": '192.168.1.112',
"user": 'root',
"passwd": '123456',
"db": 'apitest',
"port": 3306,
"charset": 'utf8'
}
创建test,测试数据库连接
if __name__ == '__main__':
#申请资源
opm = OPMysql()
sql = "select * from demo where name ='a' and pwd='e10adc3949ba59abbe56e057f20f883e' "
res = opm.op_select(sql)
#释放资源
opm.dispose()
PooledDB参数解释:
mincached,最少的空闲连接数,如果空闲连接数小于这个数,pool会创建一个新的连接。
maxcached,最大的空闲连接数,如果空闲连接数大于这个数,pool会关闭空闲连接。
maxconnections,最大的连接数,进程中最大可创建的线程数。
blocking, 当连接数达到最大连接数时,再次请求时,如果这个值是True,请求连接的程序会一直等待,直到当前连接数小于最大连接数;如果这个值为False,会报错。
masxshared,当连接数达到这个数时,新请求的连接会分享已经分配出去的连接。
在uwsgi中,每个http请求都会有一个进程,连接池中配置的连接数都是一个进程为单位的(即上面的最大连接数,都是在一个进程中创建的线程数),如果业务中,一个http请求中需要的sql连接数不是很多的话(其实大多数都只需要创建一个连接),配置的连接数配置都不需要太大。
连接池对性能的提升:
在程序创建连接的时候,可以从一个空闲的连接中获取,不需要重新初始化连接,提升获取连接的速度。
关闭连接的时候,把连接放回连接池,而不是真正的关闭,所以可以减少频繁的打开和关闭连接。
后续继续优化~~~~
python 数据库连接池_【转】Python 数据库连接池相关推荐
- python 时间序列预测_使用Python进行动手时间序列预测
python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...
- python 概率分布模型_使用python的概率模型进行公司估值
python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...
- python整数池_对Python中小整数对象池和大整数对象池的使用详解
1. 小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 256] 这些整数对象是提 ...
- mysql配置数据库连接池_三种数据库连接池的配置
三种数据库连接池的配置及使用(For JDBC) 连接池的优缺点 优点 使用连接池的最主要的优点是性能.创建一个新的数据库连接所耗费的时间主要取决于网络的速 度以及应用程序和数据库服务器的 ( 网络 ...
- python 大智慧股池_自设股票池(擒牛) 大智慧股票池
量价推动(水涨船高的原理) --自设股票池(擒牛) 各位大智慧的投资朋友,鉴于目前市场震荡,行情以游资为首敢死队成为市场中的靓点. 那么游资的操作手法,快.准.狠,从布局,到拉升,时间短,扫单的速度很 ...
- python 大智慧股池_大智慧专业版股票池
大智慧专业版股票池(分类:股票软件下载)大智慧专业版股票池是国内最权威,最专业,操作最便捷的一款精英型炒股软件. 大智慧专业版股票池的特点: 1.大智慧专业版股票池包含深度机构版.机构版.专业版等. ...
- python 异步数据库_异步Python和数据库
python 异步数据库 The asynchronous programming topic is difficult to cover. These days, it's not just abo ...
- java对象工厂池_[转载]Java对象池技术的原理及其实现
作者:汪永好 出处:计算机与信息技术 责任编辑: 方舟 [ 2006-11-25 07:00 ] 摘 要 :本文在分析对象池技术基本原理的基础上,给出了对象池技术的两种实现方式.还指出了使用对象池技术 ...
- python写金字塔_金字塔python开发手册
python API 基本方法 编写策略过程中所需要使用的基本函数.其中init和handle_bar是必须实现的两个方法,其余是可选择实现的方法. init (必须实现) init(context) ...
- python 字节流分段_由Python历史「解密」Python底层逻辑
一次纯粹的hacking Python的作者,Guido von Rossum,荷兰人.1982年,Guido从阿姆斯特丹大学获得了数学和计算机硕士学位.尽管,他算得上是一位数学家,但他更加享受计算机 ...
最新文章
- 什么是Python蛋?
- tensorflow fetch 取回某个值
- 配置一个Servlet可以被一个(指定的开头链接,后自定义)访问
- 四十、Vue项目上手 | 用户管理系统 实现弹窗,搜索和详细页功能(下篇)
- Samba服务器(一):windows访问samba服务器共享文件的简单实现(图文并茂)
- spring aopalliance 包里都有什么_【九仓樱】翻包記 05 | 是什么让我的便当包里每天都带着小企鹅?!...
- akka actor行为切换实现
- 小贝拉机器人是朋友_小朋友最爱的肉松美味来啦!咸香浓郁,肉松??控一定不要错过~...
- android 用年月日初始化date_Android 系统自带api选择年月日 日历
- MTK PerfService介绍
- selenium无法调用chrome或者firefox的原因
- 公司有内部推荐的名额
- shell脚本基础练习题
- 看了这张图你还会想着用MonoDroid来开发Android应用吗?
- Micropython TurnipBit 旋转按钮控制直流电机转速(儿时记忆中的吊扇)
- atitit 图像处理 体系树 科技树 v4 r130a .xlsx
- H5:100款html5微信小游戏最新最新源码
- 没有学历可以学计算机编程吗,学电脑编程要什么学历?
- 光耦主要参数和高速光耦如何选型
- MFC CFile输出文本文件乱码
热门文章
- python安装caffe_Linux下caffe的安装
- Sqlserver备份存储过程
- 禁止进入activity后EditText自动获得焦点的方法
- internal java compiler error_Java异常处理总结
- db2数据库日期减一天_DB2 数据库中的日期与时间如何正确操作?(2)
- python 怎么表示sqlserver null_如何使用Python将sqlserver查询输出写入.txt文件?
- 郁金香汇编代码注入怎么写看雪_世界黑客编程大赛冠军的汇编代码 你见过吗?...
- kafka java获取topic_通过编程方式获取Kafka中Topic的Metadata信息
- android开发方法数,Android减少App方法数
- 位运算使奇数+1 偶数-1_C ++程序打印从1到N的所有偶数和奇数