安装

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()
View Code

相关文章: