一个python的mysql连接池工具类

# -*- coding: utf-8 -*-
"""
@Time : 2023/3/29 17:15
@Auth : Tutu
@File : mysql_conn_pool.py
@IDE  : PyCharm
@Description  :
"""
import pymysql
from dbutils.pooled_db import PooledDB
from loguru import logger

from app.errors.errors import InsertException


class MySQLPool(object):
    # 创建单例模式
    __instance = None

    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            cls.__instance = object.__new__(cls)
        return cls.__instance

    def __init__(self, config_dict, **kwargs):
        self.pool = PooledDB(creator=pymysql,  # 使用连接数据库的模块 psycopg2
                             maxconnections=20,  # 连接池允许的最大连接数,0 和 None 表示不限制连接数
                             mincached=1,  # 初始化时,链接池中至少创建的空闲的链接,0 表示不创建
                             maxcached=10,  # 链接池中最多闲置的链接,0 和 None 不限制
                             blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
                             maxusage=None,  # 一个链接最多被重复使用的次数,None 表示无限制
                             setsession=[],  # 开始会话前执行的命令列表
                             **config_dict,
                             **kwargs)
    def get_connection(self):
        return self.pool.connection()

    def execute(self, sql, args=None):
        conn = self.pool.connection()
        cursor = conn.cursor()
        cursor.execute(sql, args)
        result_set = cursor.fetchall()
        conn.commit()
        cursor.close()
        conn.close()
        return result_set

    def close(self):
        self.pool.close()


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值