auto_trade_sys/backend/database/connection.py
薇薇安 8a89592cb5 a
2026-01-13 17:30:59 +08:00

82 lines
2.4 KiB
Python

"""
数据库连接管理
"""
import pymysql
from contextlib import contextmanager
import os
import logging
logger = logging.getLogger(__name__)
class Database:
"""数据库连接类"""
def __init__(self):
self.host = os.getenv('DB_HOST', 'localhost')
self.port = int(os.getenv('DB_PORT', 3306))
self.user = os.getenv('DB_USER', 'root')
self.password = os.getenv('DB_PASSWORD', '')
self.database = os.getenv('DB_NAME', 'auto_trade_sys')
@contextmanager
def get_connection(self):
"""获取数据库连接(上下文管理器)"""
conn = None
try:
conn = pymysql.connect(
host=self.host,
port=self.port,
user=self.user,
password=self.password,
database=self.database,
charset='utf8mb4',
cursorclass=pymysql.cursors.DictCursor,
autocommit=False
)
yield conn
except Exception as e:
if conn:
conn.rollback()
logger.error(f"数据库连接错误: {e}")
raise
finally:
if conn:
conn.close()
def execute_query(self, query, params=None):
"""执行查询,返回所有结果"""
with self.get_connection() as conn:
with conn.cursor() as cursor:
cursor.execute(query, params)
conn.commit()
return cursor.fetchall()
def execute_one(self, query, params=None):
"""执行查询,返回单条结果"""
with self.get_connection() as conn:
with conn.cursor() as cursor:
cursor.execute(query, params)
conn.commit()
return cursor.fetchone()
def execute_update(self, query, params=None):
"""执行更新,返回影响行数"""
with self.get_connection() as conn:
with conn.cursor() as cursor:
affected = cursor.execute(query, params)
conn.commit()
return affected
def execute_many(self, query, params_list):
"""批量执行"""
with self.get_connection() as conn:
with conn.cursor() as cursor:
affected = cursor.executemany(query, params_list)
conn.commit()
return affected
# 全局数据库实例
db = Database()