更新ios

This commit is contained in:
2026-01-18 18:10:32 +08:00
parent 1d24650fe4
commit efce85f4f9

95
app.py
View File

@@ -8432,46 +8432,69 @@ def get_clickhouse_client():
return _clickhouse_client return _clickhouse_client
# ==================== 高频五档数据 ClickHouse 连接池222.128.1.157 ==================== # ==================== 高频五档数据 ClickHouse HTTP 客户端222.128.1.157:18123 ====================
_realtime_clickhouse_client = None class RealtimeClickHouseHTTP:
_realtime_clickhouse_client_lock = threading.Lock() """
使用 HTTP 协议连接 ClickHouse端口 18123
因为 222.128.1.157 只开放了 HTTP 端口,未开放原生协议端口 9000
"""
def __init__(self, host='222.128.1.157', port=18123, user='default', password='Zzl33818!', database='stock'):
self.base_url = f'http://{host}:{port}'
self.user = user
self.password = password
self.database = database
def _create_realtime_clickhouse_client(): def execute(self, query, params=None):
"""创建高频五档数据 ClickHouse 客户端连接222.128.1.157""" """执行 SQL 查询,返回结果列表"""
return Cclient( # 替换参数占位符
host='222.128.1.157', if params:
port=9000, # 原生协议端口(非 HTTP 18123 for key, value in params.items():
user='default', placeholder = f'%({key})s'
password='Zzl33818!', if isinstance(value, str):
database='stock', query = query.replace(placeholder, f"'{value}'")
settings={ elif isinstance(value, (list, tuple)):
'connect_timeout': 10, # 列表参数
'send_receive_timeout': 60, if all(isinstance(v, str) for v in value):
} values_str = ', '.join(f"'{v}'" for v in value)
else:
values_str = ', '.join(str(v) for v in value)
query = query.replace(placeholder, f"({values_str})")
elif isinstance(value, date):
query = query.replace(placeholder, f"'{value.isoformat()}'")
else:
query = query.replace(placeholder, str(value))
try:
response = requests.post(
self.base_url,
params={
'database': self.database,
'user': self.user,
'password': self.password,
'default_format': 'JSONCompact',
},
data=query.encode('utf-8'),
timeout=30,
) )
response.raise_for_status()
if response.text.strip():
result = response.json()
return result.get('data', [])
return []
except requests.exceptions.RequestException as e:
print(f"[ClickHouse-HTTP] 请求失败: {e}")
raise
_realtime_clickhouse_http = None
def get_realtime_clickhouse_client(): def get_realtime_clickhouse_client():
"""获取高频五档数据 ClickHouse 客户端(带健康检查和自动重连)""" """获取高频五档数据 ClickHouse HTTP 客户端"""
global _realtime_clickhouse_client global _realtime_clickhouse_http
if _realtime_clickhouse_http is None:
with _realtime_clickhouse_client_lock: _realtime_clickhouse_http = RealtimeClickHouseHTTP()
if _realtime_clickhouse_client is None: print("[ClickHouse-HTTP] 创建 HTTP 客户端 (222.128.1.157:18123)")
_realtime_clickhouse_client = _create_realtime_clickhouse_client() return _realtime_clickhouse_http
print("[ClickHouse-Realtime] 创建新连接 (222.128.1.157)")
return _realtime_clickhouse_client
try:
_realtime_clickhouse_client.execute("SELECT 1")
except Exception as e:
print(f"[ClickHouse-Realtime] 连接失效,正在重连: {e}")
try:
_realtime_clickhouse_client.disconnect()
except Exception:
pass
_realtime_clickhouse_client = _create_realtime_clickhouse_client()
print("[ClickHouse-Realtime] 重连成功")
return _realtime_clickhouse_client
@app.route('/api/account/calendar/events', methods=['GET', 'POST']) @app.route('/api/account/calendar/events', methods=['GET', 'POST'])