数据库管理器单例模式
This commit is contained in:
@@ -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连接
|
||||||
|
|||||||
Reference in New Issue
Block a user