[ mysql数据库连接池 ]


pymysql配置连接池

import pymysql
from dbutils.pooled_db import PooledDB

class MysqlPool:
    def __init__(self) -> None:
        self.pool = PooledDB(
            creator=pymysql,
            maxconnections=6,   # 允许最大连接数
            mincached=2,        # 初始化时,最少空闲连接数
            maxcached=5,        # 最多的连接
            maxshared=3,        # 最多共享的连接
            blocking=True,      # 没有连接时, 十分阻塞True等待
            maxusage=None,      # 一个连接最多被重复使用的次数, None表示无限制
            setsession=[],      # 开始会话前执行的命令列表
            ping=0,             # Ping通mysql服务器十分连接
            host='127.0.0.1',
            port=3306,
            user='root',
            password='chenhaifeng',
            database='pymysql',
            charset='utf8'
        )

    def open(self):    
        conn = self.pool.connection()
        cursor = conn.cursor()
        return conn, cursor

    def close(self, cursor, conn):
        cursor.close()
        conn.close()

    def fetchall(self, sql, *args):
        conn, cursor = self.open()
        cursor.execute(sql, args)
        res = cursor.fetchall()
        self.close(cursor=cursor, conn=conn)
        return res

    def fetchone(self, sql, *args):
        conn, cursor = self.open()
        cursor.execute(sql, args)
        res = cursor.fetchone()
        self.close(cursor=cursor, conn=conn)
        return res

    def insert(self, sql, *args):
        conn, cursor = self.open()
        res = cursor.execute(sql, args)
        conn.commit()
        self.close(cursor=cursor, conn=conn)
        return res

    def update(self, sql, *args):
        conn, cursor = self.open()
        res = cursor.execute(sql, args)
        conn.commit()
        self.close(cursor=cursor, conn=conn)
        return res

    def delete(self, sql, *args):
        conn, cursor = self.open()
        res = cursor.execute(sql, args)
        conn.commit()
        self.close(cursor=cursor, conn=conn)
        return res

db = MysqlPool()

# res = db.insert('insert into users values(%s, %s)', ("1743", "123456"))
# res = db.fetchone("show tables;")
# res = db.insert('insert into users(email, password) values (%s, %s)', '1233@qq.com', '123456')
# res = db.update('update users set email=%s, password=%s where id = %s', '999@qq.com', '999', 1)
# res = db.delete('delete from users where id = %s', 1)
res = db.fetchall('select email, password from users;')
print(res)