feature: 数据库连接与SQL集中管理,提高代码可读性

This commit is contained in:
liuwei
2025-03-18 10:24:38 +08:00
parent fd1676b908
commit 727d2d3938
7 changed files with 571 additions and 0 deletions

51
db/connection.py Normal file
View File

@@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
import logging
import mysql.connector.pooling
import redis
from typing import Optional
class DBConnectionManager:
"""数据库连接管理类用于管理MySQL和Redis连接池"""
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super(DBConnectionManager, cls).__new__(cls)
cls._instance.initialized = False
return cls._instance
def __init__(self, mysql_config: Optional[dict] = None, redis_config: Optional[dict] = None):
if self.initialized:
return
self.LOG = logging.getLogger("DBConnectionManager")
# 初始化MySQL连接池
if mysql_config:
self.mysql_pool = mysql.connector.pooling.MySQLConnectionPool(**mysql_config)
self.LOG.info(f"MySQL连接池初始化完成: {mysql_config}")
else:
self.mysql_pool = None
# 初始化Redis连接池
if redis_config:
self.redis_pool = redis.ConnectionPool(**redis_config)
self.LOG.info(f"Redis连接池初始化完成: {redis_config}")
else:
self.redis_pool = None
self.initialized = True
def get_mysql_connection(self):
"""获取MySQL连接"""
if not self.mysql_pool:
raise Exception("MySQL连接池未初始化")
return self.mysql_pool.get_connection()
def get_redis_connection(self):
"""获取Redis连接"""
if not self.redis_pool:
raise Exception("Redis连接池未初始化")
return redis.Redis(connection_pool=self.redis_pool)