update log file

This commit is contained in:
2025-08-18 14:05:59 +08:00
parent d38303698b
commit e51d6ee653
6 changed files with 220 additions and 221 deletions

View File

@@ -1,6 +1,29 @@
"""
MySqlHelper 增强版
—— 增加事务管理
—— 增加ID获取
—— 增加表操作等使用功能
"""
import pymysql
from pymysql import Error
from typing import List, Dict, Union, Optional, Tuple
from contextlib import contextmanager
from LogHelper import LogHelper
import logging
# 创建配置实例
logHelper = LogHelper(
level=logging.DEBUG, # 设置日志级别为 DEBUG
format='%(asctime)s [%(levelname)s] %(message)s' # 自定义格式
)
# # 添加处理器
logHelper.add_console_handler() # 默认输出到 stdout
logHelper.add_file_handler('Debug.log') # 添加文件日志
# # 应用配置
logHelper.setup()
logger = logging.getLogger('StockDataImporter')
class MySQLHelper:
def __init__(self, host: str, user: str, password: str, database: str,
@@ -39,10 +62,10 @@ class MySQLHelper:
cursorclass=pymysql.cursors.DictCursor # 返回字典形式的结果
)
self.cursor = self.connection.cursor()
print("MySQL数据库连接成功")
logger.info("MySQL数据库连接成功")
return True
except Error as e:
print(f"连接MySQL数据库失败: {e}")
logger.error(f"连接MySQL数据库失败: {e}")
return False
def close(self) -> None:
@@ -53,7 +76,7 @@ class MySQLHelper:
self.cursor.close()
if self.connection:
self.connection.close()
print("MySQL数据库连接已关闭")
logger.info("MySQL数据库连接已关闭")
def execute_query(self, sql: str, params: Union[Tuple, List, Dict, None] = None) -> List[Dict]:
"""
@@ -66,7 +89,7 @@ class MySQLHelper:
self.cursor.execute(sql, params)
return self.cursor.fetchall()
except Error as e:
print(f"查询执行失败: {e}")
logger.error(f"查询执行失败: {e}")
return []
def execute_update(self, sql: str, params: Union[Tuple, List, Dict, None] = None) -> int:
@@ -82,7 +105,7 @@ class MySQLHelper:
return affected_rows
except Error as e:
self.connection.rollback()
print(f"更新执行失败: {e}")
logger.error(f"更新执行失败: {e}")
return 0
def execute_many(self, sql: str, params_list: List[Union[Tuple, List, Dict]]) -> int:
@@ -98,9 +121,41 @@ class MySQLHelper:
return affected_rows
except Error as e:
self.connection.rollback()
print(f"批量执行失败: {e}")
logger.error(f"批量执行失败: {e}")
return 0
# ================== 新增功能方法 ==================
def get_last_insert_id(self) -> int:
"""
获取最后插入行的自增ID
:return: 自增ID值
"""
return self.cursor.lastrowid if self.cursor else 0
def execute_insert(self, sql: str, params: Union[Tuple, List, Dict, None] = None) -> int:
"""
执行插入操作并返回自增ID
:return: 自增ID值
"""
self.execute_update(sql, params)
return self.get_last_insert_id()
@contextmanager
def transaction(self):
"""
事务上下文管理器,确保操作原子性
用法:
with db.transaction():
db.execute_update(...)
db.execute_many(...)
"""
try:
yield
self.connection.commit()
except Exception as e:
self.connection.rollback()
raise e
def get_one(self, sql: str, params: Union[Tuple, List, Dict, None] = None) -> Optional[Dict]:
"""
获取单条记录
@@ -112,7 +167,7 @@ class MySQLHelper:
self.cursor.execute(sql, params)
return self.cursor.fetchone()
except Error as e:
print(f"获取单条记录失败: {e}")
logger.error(f"获取单条记录失败: {e}")
return None
def table_exists(self, table_name: str) -> bool:
@@ -124,12 +179,61 @@ class MySQLHelper:
sql = "SHOW TABLES LIKE %s"
result = self.execute_query(sql, (table_name,))
return len(result) > 0
def create_table(self, sql: str) -> bool:
"""
执行建表语句
:param sql: CREATE TABLE语句
:return: 是否成功
"""
try:
self.cursor.execute(sql)
self.connection.commit()
return True
except Error as e:
logger.error(f"创建表失败: {e}")
return False
def drop_table(self, table_name: str) -> bool:
"""
删除表
:param table_name: 表名
:return: 是否成功
"""
try:
self.cursor.execute(f"DROP TABLE IF EXISTS {table_name}")
self.connection.commit()
return True
except Error as e:
logger.error(f"删除表失败: {e}")
return False
def get_columns(self, table_name: str) -> List[Dict]:
"""
获取表的列信息
:param table_name: 表名
:return: 列信息字典列表
"""
return self.execute_query(f"DESCRIBE {table_name}")
# ================== 事务控制方法 ==================
def start_transaction(self):
"""显式开始事务"""
self.connection.begin()
def commit(self):
"""提交事务"""
self.connection.commit()
def rollback(self):
"""回滚事务"""
self.connection.rollback()
# ================== 上下文管理器 ==================
def __enter__(self):
"""支持with上下文管理"""
self.connect()
return self
def __exit__(self, exc_type, exc_val, exc_tb):
"""支持with上下文管理"""
self.close()