35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
import asyncio
|
|
from utils.logger import session_logger
|
|
from database.connection import get_db_manager
|
|
|
|
class DatabaseServiceBase:
|
|
_logged_initialized_services = set()
|
|
|
|
"""
|
|
数据库服务基类,提供通用的数据库初始化和会话管理功能
|
|
所有需要访问数据库的服务类都应该继承此基类
|
|
"""
|
|
def __init__(self, service_name="unknown"):
|
|
self.db_manager = None
|
|
self._db_initialized = False
|
|
self.service_name = service_name
|
|
|
|
async def _init_database(self):
|
|
"""初始化数据库连接"""
|
|
if self._db_initialized:
|
|
return
|
|
try:
|
|
self.db_manager = await get_db_manager()
|
|
self._db_initialized = True
|
|
if self.service_name not in self._logged_initialized_services:
|
|
self._logged_initialized_services.add(self.service_name)
|
|
session_logger.info("system", self.service_name, f"{self.service_name}数据库连接初始化成功")
|
|
except Exception as e:
|
|
session_logger.error("system", self.service_name, f"{self.service_name}数据库连接初始化失败: {str(e)}")
|
|
raise
|
|
|
|
async def get_session(self):
|
|
"""获取数据库会话"""
|
|
await self._init_database()
|
|
return await self.db_manager.get_session()
|