feature: 数据库连接与SQL集中管理,提高代码可读性
This commit is contained in:
80
db/base.py
Normal file
80
db/base.py
Normal file
@@ -0,0 +1,80 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import logging
|
||||
from typing import List, Dict, Any, Optional, Tuple, Union
|
||||
|
||||
from db.connection import DBConnectionManager
|
||||
|
||||
|
||||
class BaseDBOperator:
|
||||
"""基础数据库操作类"""
|
||||
|
||||
def __init__(self, db_manager: DBConnectionManager):
|
||||
self.db_manager = db_manager
|
||||
self.LOG = logging.getLogger(self.__class__.__name__)
|
||||
|
||||
def execute_query(self, sql: str, params: Optional[tuple] = None, fetch_one: bool = False) -> Union[List[Dict], Dict, None]:
|
||||
"""执行查询SQL"""
|
||||
conn = self.db_manager.get_mysql_connection()
|
||||
try:
|
||||
with conn.cursor(dictionary=True) as cursor:
|
||||
cursor.execute(sql, params or ())
|
||||
if fetch_one:
|
||||
return cursor.fetchone()
|
||||
return cursor.fetchall()
|
||||
except Exception as e:
|
||||
self.LOG.error(f"执行查询SQL出错: {e}, SQL: {sql}, 参数: {params}")
|
||||
return None
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def execute_update(self, sql: str, params: Optional[tuple] = None) -> bool:
|
||||
"""执行更新SQL"""
|
||||
conn = self.db_manager.get_mysql_connection()
|
||||
try:
|
||||
with conn.cursor() as cursor:
|
||||
cursor.execute(sql, params or ())
|
||||
conn.commit()
|
||||
return True
|
||||
except Exception as e:
|
||||
self.LOG.error(f"执行更新SQL出错: {e}, SQL: {sql}, 参数: {params}")
|
||||
conn.rollback()
|
||||
return False
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def execute_batch(self, sql: str, params_list: List[tuple]) -> bool:
|
||||
"""批量执行SQL"""
|
||||
if not params_list:
|
||||
return True
|
||||
|
||||
conn = self.db_manager.get_mysql_connection()
|
||||
try:
|
||||
with conn.cursor() as cursor:
|
||||
cursor.executemany(sql, params_list)
|
||||
conn.commit()
|
||||
return True
|
||||
except Exception as e:
|
||||
self.LOG.error(f"批量执行SQL出错: {e}, SQL: {sql}, 参数数量: {len(params_list)}")
|
||||
conn.rollback()
|
||||
return False
|
||||
finally:
|
||||
conn.close()
|
||||
|
||||
def execute_transaction(self, operations: List[Tuple[str, tuple]]) -> bool:
|
||||
"""执行事务"""
|
||||
if not operations:
|
||||
return True
|
||||
|
||||
conn = self.db_manager.get_mysql_connection()
|
||||
try:
|
||||
with conn.cursor() as cursor:
|
||||
for sql, params in operations:
|
||||
cursor.execute(sql, params)
|
||||
conn.commit()
|
||||
return True
|
||||
except Exception as e:
|
||||
self.LOG.error(f"执行事务出错: {e}, 操作数量: {len(operations)}")
|
||||
conn.rollback()
|
||||
return False
|
||||
finally:
|
||||
conn.close()
|
||||
Reference in New Issue
Block a user