数据库管理器单例模式

This commit is contained in:
liuwei
2025-03-19 10:00:27 +08:00
parent dd2ad2588d
commit b46982e665

View File

@@ -1,7 +1,5 @@
import logging import logging
import pymysql import mysql.connector
from pymysql.cursors import DictCursor
from dbutils.pooled_db import PooledDB
import redis import redis
class DBConnectionManager: class DBConnectionManager:
@@ -59,24 +57,23 @@ class DBConnectionManager:
if not config: if not config:
self.logger.warning("MySQL配置为空跳过初始化") self.logger.warning("MySQL配置为空跳过初始化")
return return
self.mysql_pool = PooledDB( # 准备连接池配置
creator=pymysql, pool_config = {
maxconnections=10, # 连接池最大连接数 'pool_name': 'wechat_robot_pool',
mincached=2, # 初始化时,连接池中至少创建的空闲的连接 'pool_size': 10, # 连接池大小
maxcached=5, # 连接池中最多闲置的连接 'host': config.get('host', 'localhost'),
blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待 'port': config.get('port', 3306),
maxusage=None, # 一个连接最多被重复使用的次数None表示无限制 'user': config.get('user', 'root'),
setsession=[], # 开始会话前执行的命令列表 'password': config.get('password', ''),
ping=0, # ping MySQL服务端检查是否服务可用 'database': config.get('database', ''),
host=config.get('host', 'localhost'), 'charset': config.get('charset', 'utf8mb4'),
port=config.get('port', 3306), 'use_pure': True, # 使用纯Python实现
user=config.get('user', 'root'), 'autocommit': True
password=config.get('password', ''), }
database=config.get('database', ''),
charset=config.get('charset', 'utf8mb4'), # 创建连接池
cursorclass=DictCursor self.mysql_pool = mysql.connector.pooling.MySQLConnectionPool(**pool_config)
)
self.logger.info("MySQL连接池初始化成功") self.logger.info("MySQL连接池初始化成功")
except Exception as e: except Exception as e:
self.logger.error(f"MySQL连接池初始化失败: {e}") self.logger.error(f"MySQL连接池初始化失败: {e}")
@@ -118,7 +115,7 @@ class DBConnectionManager:
if self.mysql_pool is None: if self.mysql_pool is None:
raise Exception("MySQL连接池未初始化") raise Exception("MySQL连接池未初始化")
return self.mysql_pool.connection() return self.mysql_pool.get_connection()
def get_redis_connection(self): def get_redis_connection(self):
"""获取Redis连接 """获取Redis连接