更新ios
This commit is contained in:
95
app.py
95
app.py
@@ -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)
|
||||||
def get_realtime_clickhouse_client():
|
query = query.replace(placeholder, f"({values_str})")
|
||||||
"""获取高频五档数据 ClickHouse 客户端(带健康检查和自动重连)"""
|
elif isinstance(value, date):
|
||||||
global _realtime_clickhouse_client
|
query = query.replace(placeholder, f"'{value.isoformat()}'")
|
||||||
|
else:
|
||||||
with _realtime_clickhouse_client_lock:
|
query = query.replace(placeholder, str(value))
|
||||||
if _realtime_clickhouse_client is None:
|
|
||||||
_realtime_clickhouse_client = _create_realtime_clickhouse_client()
|
|
||||||
print("[ClickHouse-Realtime] 创建新连接 (222.128.1.157)")
|
|
||||||
return _realtime_clickhouse_client
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
_realtime_clickhouse_client.execute("SELECT 1")
|
response = requests.post(
|
||||||
except Exception as e:
|
self.base_url,
|
||||||
print(f"[ClickHouse-Realtime] 连接失效,正在重连: {e}")
|
params={
|
||||||
try:
|
'database': self.database,
|
||||||
_realtime_clickhouse_client.disconnect()
|
'user': self.user,
|
||||||
except Exception:
|
'password': self.password,
|
||||||
pass
|
'default_format': 'JSONCompact',
|
||||||
_realtime_clickhouse_client = _create_realtime_clickhouse_client()
|
},
|
||||||
print("[ClickHouse-Realtime] 重连成功")
|
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'])
|
@app.route('/api/account/calendar/events', methods=['GET', 'POST'])
|
||||||
|
|||||||
Reference in New Issue
Block a user