安装
pip3 install DBUtils
DBUtils是Python的一个用于实现数据库连接池的模块。
此连接池有两种连接模式:
# BDUtils数据库链接池: 模式一:基于threaing.local实现为每一个线程创建一个连接,关闭是伪关闭,当前线程可以重复 模式二:连接池原理 如果有三个线程来数据库中获取连接: 如果三个同时来的,一人给一个连接; 如果一个一个来,有时间间隔,用一个连接就可以为三个线程提供服务; 其他情况: 有可能:1个连接就可以为三个线程提供服务 有可能:2个连接就可以为三个线程提供服务 有可能:3个连接就可以为三个线程提供服务 PS:maxshared在使用pymysql中均无用。链接数据库的模块:只有threadsafety>1的时候才有用。
模式一:为每个线程创建一个连接,线程即使调用了close方法,也不会关闭,只是把连接重新放到连接池,供自己线程再次使用。当线程终止时,连接自动关闭。(如果线程比较多还是会创建很多连接,推荐使用模式二)
import pymysql from DBUtils.PersistentDB import PersistentDB POOL = PersistentDB( creator=pymysql, # 使用链接数据库的模块 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 closeable=False, # 如果为False时,conn.close() 实际上被忽略,供下次使用,再线程关闭时,才会自动关闭链接。如果为True时, conn.close()则关闭链接,那么再次调用pool.connection时就会报错,因为已经真的关闭了连接(pool.steady_connection()可以获取一个新的链接) threadlocal=None, # 本线程独享值得对象,用于保存链接对象,如果链接对象被重置 host="127.0.0.1", port=3306, user="root", password="", database="code_record", charset="utf8" ) def func(): conn = POOL.connection(shareable=False) cursor = conn.cursor() cursor.execute("select * from userinfo") ret = cursor.fetchall() print(ret) cursor.close() conn.close() func()