2026-10-28 11:14:17 +08:00

62 lines
1.5 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""反馈模块数据库连接
自动检测:优先走 SSH 隧道(127.0.0.1:3307→生产库)
隧道不可用时回退到本地 3306
"""
import socket
import pymysql
from dbutils.pooled_db import PooledDB
_pool = None
def _detect_port():
"""检测 3307(隧道)是否可用,否则用本地 3306"""
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(2)
try:
result = sock.connect_ex(('127.0.0.1', 3307))
return 3307 if result == 0 else 3306
finally:
sock.close()
def _make_conn():
"""创建数据库连接(修复PooledDB + caching_sha2_password兼容问题)"""
port = _detect_port()
return pymysql.connect(
host="127.0.0.1",
port=port,
user="dy_app",
password="dy_data_2026",
database="dy_data",
charset="utf8mb4",
cursorclass=pymysql.cursors.DictCursor,
)
def get_prod_pool():
global _pool
if _pool is None:
_pool = PooledDB(
creator=_make_conn,
maxconnections=5,
mincached=1,
blocking=True,
)
return _pool
def prod_query(sql, params=None):
"""对统一数据库执行SQL"""
pool = get_prod_pool()
conn = pool.connection()
try:
with conn.cursor() as cur:
cur.execute(sql, params or ())
if sql.strip().upper().startswith("SELECT"):
return cur.fetchall()
conn.commit()
return cur.lastrowid
finally:
conn.close()