DBUtils - Python数据库连接池
创建数据库连接池
import time import pymysql import threading from DBUtils.PooledDB import PooledDB, SharedDBConnection POOL = PooledDB(creator=pymysql, # 使用链接数据库的模块maxconnections=6, # 连接池允许的最大连接数,0和None表示不限制连接数mincached=2, # 初始化时,链接池中至少创建的空闲的链接,0表示不创建maxcached=5, # 链接池中最多闲置的链接,0和None不限制maxshared=3, # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错maxusage=None, # 一个链接最多被重复使用的次数,None表示无限制setsession=[], # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]ping=0,# ping MySQL服务端,检查是否服务可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = alwayshost='127.0.0.1',port=3306,user='root',password='123',database='pooldb',charset='utf8' )创建数据库连接池
使用数据库连接池
def func():# 检测当前正在运行连接数的是否小于最大链接数,如果不小于则:等待或报raise TooManyConnections异常# 否则# 则优先去初始化时创建的链接中获取链接 SteadyDBConnection。# 然后将SteadyDBConnection对象封装到PooledDedicatedDBConnection中并返回。# 如果最开始创建的链接没有链接,则去创建一个SteadyDBConnection对象,再封装到PooledDedicatedDBConnection中并返回。# 一旦关闭链接后,连接就返回到连接池让后续线程继续使用。conn = POOL.connection()cursor = conn.cursor()cursor.execute('select * from tb1')result = cursor.fetchall()conn.close()使用数据库连接池中的链接
自制sqlhelper
class MySQLhelper(object):def __init__(self, host, port, dbuser, password, database):self.pool = PooledDB(creator=pymysql, # 使用链接数据库的模块maxconnections=6, # 连接池允许的最大连接数,0和None表示不限制连接数mincached=2, # 初始化时,链接池中至少创建的空闲的链接,0表示不创建maxcached=5, # 链接池中最多闲置的链接,0和None不限制maxshared=3,# 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错maxusage=None, # 一个链接最多被重复使用的次数,None表示无限制setsession=[], # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]ping=0,# ping MySQL服务端,检查是否服务可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = alwayshost=host,port=int(port),user=dbuser,password=password,database=database,charset='utf8')def create_conn_cursor(self):conn = self.pool.connection()cursor = conn.cursor(pymysql.cursors.DictCursor)return conn,cursordef fetch_all(self, sql, args):conn,cursor = self.create_conn_cursor()cursor.execute(sql,args)result = cursor.fetchall()cursor.close()conn.close()return resultdef insert_one(self,sql,args):conn,cursor = self.create_conn_cursor()res = cursor.execute(sql,args)conn.commit()print(res)conn.close()return resdef update(self,sql,args):conn,cursor = self.create_conn_cursor()res = cursor.execute(sql,args)conn.commit()print(res)conn.close()return ressqlhelper = MySQLhelper("127.0.0.1", 3306, "root", "1233121234567", "dragon")# sqlhelper.fetch_all("select * from user where id=%s",(1))# sqlhelper.insert_one("insert into user VALUES (%s,%s)",("jinwangba",4))# sqlhelper.update("update user SET name=%s WHERE id=%s",("yinwangba",1)) 好使不好使,试试就知道了
转载于:https://www.cnblogs.com/xiao-xue-di/p/10137629.html
DBUtils - Python数据库连接池相关推荐
- python 数据库连接池DBUtils
python 数据库连接池DBUtils 0x00 简述 0x01 摘要 0x02 模块 0x03 下载及安装 1.下载 2.安装 0x04 SimplePooledDB 0x05 SteadyDB ...
- 在Python数据库连接池中如何创建请求连接的方案
http://developer.51cto.com/art/201003/189669.htm 在Python数据库连接池中操作过程中如果你设置好了连接池,你就可以按照如下进行操作.通过以下的内容你 ...
- python数据库连接池工具类_Python数据库连接池DBUtils
DBUtils简介 DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不会关闭,只是把连接重新放 ...
- Python数据库连接池DBUtils
DBUtils是Python的一个用于实现数据库连接池的模块 此连接池有两种连接模式: DBUtils提供两种外部接口: PersistentDB :提供线程专用的数据库连接,并自动管理连接. ...
- 基于DBUtils实现数据库连接池
小知识: 1.子类继承父类的三种方式 class Dog(Animal): #子类 派生类def __init__(self,name,breed, life_value,aggr):# Animal ...
- python 数据库连接池_【转】Python 数据库连接池
python编程中可以使用pymysql进行数据库连接及增删改查操作,但每次连接mysql请求时,都是独立的去请求访问,比较浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响.因 ...
- Python 数据库连接池
python编程中可以使用pymysql进行数据库连接及增删改查操作,但每次连接mysql请求时,都是独立的去请求访问,比较浪费资源,而且访问数量达到一定数量时,对mysql的性能会产生较大的影响.因 ...
- python循环顶帖_设计Python数据库连接池1-对象的循环引用问题
在Python中如果对象定义了__del__方法的话,在对象的引用记数为0时会自动调用__del__方法(很象c++中的析构函数),但如果A对象引用B对象,B对象又引用A对象,就形成循环引用,此时A, ...
- python数据库连接池使用
在转载|pymysql.err.InternalError: Packet sequence number wrong - got 45 expected 0这一篇中,我使用了方法一.接下来试试方法三 ...
最新文章
- matlab 打开txt文件窗口,Matlab读取txt文件、xlsx文件
- 动漫风格迁移AnimeGANv2,发布线上运行Demo
- 关于Session_End()运行机制的一些细节!
- OpenCASCADE:拓扑 API之特征
- 在python中字符串可以使用什么来表示_Python 字符串定义
- 【NOI2004】【洛谷P1486】郁闷的出纳员(Splay写法)
- mysql数据库复制功能配置,最详细的mysql数据库主从复制功能配置教程(docker版本)...
- html 进度条roll,js实现增加数字显示的环形进度条效果
- Android开发笔记(一百零九)利用网盘实现云存储
- mac weka连接mysql_weka连接mysqllinux
- sqlalchemy mysql教程_SQLAlchemy 教程 —— 基础入门篇
- 再学 GDI+[45]: 文本输出 - 文本呈现质量
- Tomcat 内存溢出问题与解决方法
- 内核block层IO调度器—bfq算法深入探索2
- 读吴军博士新浪微博(2012.09-2014.12)信息整理
- Oracle PL/SQL 循环
- 手机内存卡大小的计算
- 湖南大学计算机考研复习资料
- ApkScan-PKID 查壳工具下载使用以及相关技术介绍
- Point-cloud based 3D object detection and classification methods for self-driving applications
热门文章
- 和你谈谈数据分析报告
- python打卡记录去重_Python笔记记录
- 如何打开设计思路,避免不断改稿?只需提前做好这一步
- 成为“能打”的二次元游戏《明日方舟》做对了什么?
- No module named pip
- PL/SQL如何设置 窗口列表默认显示
- 参数NLS_LENGTH_SEMANTICS的设置问题
- goldengate使用ASM存放trail文件注意事项
- DRF (Django REST framework) 框架介绍
- python +Django 搭建web开发环境初步,显示当前时间