Python 数据库连接池 DBUtils

摘要:
Blocking=True,#如果连接池中没有可用连接,是否阻止等待。例如:[“setdatestyleto…”,“setttimezone…”]ping=0,#ping MySQL服务器,检查服务是否可用#例如:0=None=从不,1=默认=当vertisrequested时,2=whenacursorisCreated,4=当执行查询时,7=alwaysshot='192.168.30.161',port=3306,user='root',password='000000',database='code_Count',charset='utf8mb4')deffunc():#检查当前运行的连接数是否小于最大链接数。如果没有,请等待或报告raiseTooManyConnection异常#否则,请优先从初始化期间创建的链接获取SteadyDBConnection#然后将SteadyDBonnection对象封装到PooledDedicated DBConnection中并返回它#如果最初创建的链接没有链接,请创建SteadyBonnection对象,并返回它#一旦链接关闭,连接将返回到连接池,供后续线程继续使用。Conn=泳池。connection()#print#printcursor=连接。cursor()光标。执行人。executeresult=光标。fetchone()打印光标。close()connect.close()for iinrange:线程。线start()如果MySQL在多个线程中运行,则需要一个锁

安装

pip install DBUtils

使用

import threading
import pymysql
from DBUtils.PooledDB import PooledDB

POOL = PooledDB(
    creator=pymysql,    # 使用链接数据库的模块
    maxconnections=20,  # 连接池允许的最大连接数,0和None表示不限制连接数
    mincached=2,        # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
    maxcached=10,       # 链接池中最多闲置的链接,0和None不限制
    maxshared=0,        # 链接池中最多共享的链接数量,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 = always
    host='192.168.30.161',
    port=3306,
    user='root',
    password='000000',
    database='code_count',
    charset='utf8mb4'
)


def func():
    # 检测当前正在运行连接数的是否小于最大链接数,如果不小于则:等待或报raise TooManyConnections异常
    # 否则优先去初始化时创建的链接中获取链接 SteadyDBConnection。
    # 然后将SteadyDBConnection对象封装到PooledDedicatedDBConnection中并返回。
    # 如果最开始创建的链接没有链接,则去创建一个SteadyDBConnection对象,再封装到PooledDedicatedDBConnection中并返回。
    # 一旦关闭链接后,连接就返回到连接池让后续线程继续使用。
    conn = POOL.connection()

    # print(th, '链接被拿走了', conn1._con)
    # print(th, '池子里目前有', pool._idle_cache, '
')

    cursor = conn.cursor()

    cursor.execute('select sleep(2)')
    cursor.execute('select * from record')
    result = cursor.fetchone()
    print(result)
    cursor.close()
    conn.close()


for i in range(30):
    threading.Thread(target=func).start()

如果在多线程下操作MySQL需要加锁

免责声明:文章转载自《Python 数据库连接池 DBUtils》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇刷新aspx页面的六种方法IOS ——OC—— NSDictionary的使用总结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Ansible介绍与安装使用

Ansible 介绍与安装 目录 Ansible 介绍与安装 Ansible的定义 Ansible的基础架构 Ansible的程序目录结构 Anisible特性 注意事项 安装Ansible 自定义清单(配置组内成员) Anisble实现管理方式 Ansible常用模块 ping 模块 user 模块 command/raw/shell 模块 scr...

python 操作openpyxl导出Excel 设置单元格格式以及合并处理

贴上一个例子,里面设计很多用法,根据将相同日期的某些行合并处理。 from openpyxl importWorkbook...

python标准库介绍——32 Queue 模块详解

Queue 模块 ``Queue`` 模块提供了一个线程安全的队列 (queue) 实现, 如 [Example 3-2 #eg-3-2] 所示. 你可以通过它在多个线程里安全访问同个对象. ====Example 3-2. 使用 Queue 模块====[eg-3-2] ``` File: queue-example-1.py...

python之PIL库(Image模块)

PIL(Python Image Library)是python的第三方图像处理库,PIL的功能非常的强大,几乎被认定是Python的官方图像处理库了。 由于PIL仅支持到python2.7于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新的python3,而且扩容了很多特性,所以在python3我们可以直接安装Pillow。 我...

Anaconda的安装

本人之前刚刚入门时“不懂事”安装了Python,现在才知道直接安装Anaconda(蟒蛇)就可以(因为Anaconda里就包含了Python),在使用Python时,我们经常需要用到很多第三方库,例如Pillow,以及MySQL驱动程序,Web框架Flask,科学计算Numpy等。用pip一个一个安装费时费力,还需要考虑兼容性。推荐直接使用Anaconda...

Python实现快捷输入(类似WeGame的一键喊话)

故事背景:   表弟跟我说,他玩游戏玩的不是很好,导致经常被队友互动,但是自己的手速有限,经常在互动中败阵。   因此,尝试做一款小工具,帮助表弟取得和队友互动的胜利! 逻辑设计:   监听键盘上的某个按键   当该按键被按下时,调用数据库(或者远程接口)的数据   将获取到的数据写进Windows的剪贴板   模拟粘贴快捷键(Ctrl + V),将数据文...