@@ -167,12 +167,16 @@ class PostgresCursor:
|
||||
row = self._cursor.fetchone()
|
||||
if row is None:
|
||||
return None
|
||||
return dict(row) if row else None
|
||||
# RealDictCursor already returns a dict, so return as-is
|
||||
return row if isinstance(row, dict) else dict(row) if row else None
|
||||
|
||||
def fetchall(self) -> List[Dict[str, Any]]:
|
||||
"""Fetch all rows"""
|
||||
rows = self._cursor.fetchall()
|
||||
return [dict(row) for row in rows] if rows else []
|
||||
if not rows:
|
||||
return []
|
||||
# RealDictCursor already returns dicts, so return as-is
|
||||
return [row if isinstance(row, dict) else dict(row) for row in rows]
|
||||
|
||||
def close(self):
|
||||
"""Close cursor"""
|
||||
@@ -234,7 +238,10 @@ def get_pg_connection():
|
||||
conn.rollback()
|
||||
except Exception:
|
||||
pass
|
||||
logger.error(f"PostgreSQL operation error: {e}")
|
||||
# 记录更详细的错误信息
|
||||
error_msg = str(e) if e else repr(e)
|
||||
error_type = type(e).__name__
|
||||
logger.error(f"PostgreSQL operation error ({error_type}): {error_msg}", exc_info=True)
|
||||
raise
|
||||
finally:
|
||||
if conn:
|
||||
|
||||
@@ -16,6 +16,16 @@ def setup_logger():
|
||||
format=log_format
|
||||
)
|
||||
|
||||
# 过滤 werkzeug 的 INFO 级别日志(减少噪音)
|
||||
# 只保留 WARNING 及以上级别
|
||||
werkzeug_logger = logging.getLogger('werkzeug')
|
||||
werkzeug_logger.setLevel(logging.WARNING)
|
||||
|
||||
# 过滤 kline 路由的 INFO 级别日志(减少噪音)
|
||||
# 只保留 WARNING 及以上级别
|
||||
kline_logger = logging.getLogger('app.routes.kline')
|
||||
kline_logger.setLevel(logging.WARNING)
|
||||
|
||||
# 创建日志目录
|
||||
log_dir = 'logs'
|
||||
if not os.path.exists(log_dir):
|
||||
|
||||
Reference in New Issue
Block a user