更新ios
This commit is contained in:
95
app.py
95
app.py
@@ -8432,46 +8432,69 @@ def get_clickhouse_client():
|
||||
return _clickhouse_client
|
||||
|
||||
|
||||
# ==================== 高频五档数据 ClickHouse 连接池(222.128.1.157) ====================
|
||||
_realtime_clickhouse_client = None
|
||||
_realtime_clickhouse_client_lock = threading.Lock()
|
||||
# ==================== 高频五档数据 ClickHouse HTTP 客户端(222.128.1.157:18123) ====================
|
||||
class RealtimeClickHouseHTTP:
|
||||
"""
|
||||
使用 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():
|
||||
"""创建高频五档数据 ClickHouse 客户端连接(222.128.1.157)"""
|
||||
return Cclient(
|
||||
host='222.128.1.157',
|
||||
port=9000, # 原生协议端口(非 HTTP 18123)
|
||||
user='default',
|
||||
password='Zzl33818!',
|
||||
database='stock',
|
||||
settings={
|
||||
'connect_timeout': 10,
|
||||
'send_receive_timeout': 60,
|
||||
}
|
||||
)
|
||||
|
||||
def get_realtime_clickhouse_client():
|
||||
"""获取高频五档数据 ClickHouse 客户端(带健康检查和自动重连)"""
|
||||
global _realtime_clickhouse_client
|
||||
|
||||
with _realtime_clickhouse_client_lock:
|
||||
if _realtime_clickhouse_client is None:
|
||||
_realtime_clickhouse_client = _create_realtime_clickhouse_client()
|
||||
print("[ClickHouse-Realtime] 创建新连接 (222.128.1.157)")
|
||||
return _realtime_clickhouse_client
|
||||
def execute(self, query, params=None):
|
||||
"""执行 SQL 查询,返回结果列表"""
|
||||
# 替换参数占位符
|
||||
if params:
|
||||
for key, value in params.items():
|
||||
placeholder = f'%({key})s'
|
||||
if isinstance(value, str):
|
||||
query = query.replace(placeholder, f"'{value}'")
|
||||
elif isinstance(value, (list, tuple)):
|
||||
# 列表参数
|
||||
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:
|
||||
_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] 重连成功")
|
||||
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()
|
||||
|
||||
return _realtime_clickhouse_client
|
||||
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():
|
||||
"""获取高频五档数据 ClickHouse HTTP 客户端"""
|
||||
global _realtime_clickhouse_http
|
||||
if _realtime_clickhouse_http is None:
|
||||
_realtime_clickhouse_http = RealtimeClickHouseHTTP()
|
||||
print("[ClickHouse-HTTP] 创建 HTTP 客户端 (222.128.1.157:18123)")
|
||||
return _realtime_clickhouse_http
|
||||
|
||||
|
||||
@app.route('/api/account/calendar/events', methods=['GET', 'POST'])
|
||||
|
||||
Reference in New Issue
Block a user