Files
Incidents-Data-Portal/backend/app/link_wedata_utils.py
T
2026-07-10 18:55:55 +08:00

132 lines
4.4 KiB
Python
Raw 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.
import traceback
import tdlc_connector
from tdlc_connector import constants
def query_tencent_cloud_data(config,start_time,end_time,vin):
try:
# 配置参数(替换为您的实际参数)
# config = {
# 'region': 'ap-shanghai', # 引擎所在地域
# 'secret_id': 'AKIDtfFdqqgYUflgdZaPFvOfkDd0EGEUkx0u',
# 'secret_key': 'sBKH5WrESUJwLdljV6Yrysc9TaTAh3Gk',
# 'engine': 'gen6_prod_aiag', # 引擎名称
# "database":"dws"
# }
# 建立连接
conn = tdlc_connector.connect(
**config,
engine_type=constants.EngineType.SPARK,
result_style=constants.ResultStyles.LIST
)
cursor = conn.cursor()
# 执行查询
sql = f"""
SELECT * FROM gen6_incidents
WHERE incident_time BETWEEN '{start_time}' AND '{end_time}'
AND oneid = '{vin}'
"""
print(f"执行SQL: {sql}")
cursor.execute(sql)
# 获取列名
columns = [desc[0] for desc in cursor.description] # 使用cursor.description获取列名 [[5]]
# 获取结果
results = cursor.fetchall()
print(f"查询结果共 {len(results)} 条:")
# 将结果转换为字典列表格式
dict_results = []
for i, row in enumerate(results, 1):
# 将每一行转换为字典,键为列名,值为对应的值
row_dict = dict(zip(columns, row))
dict_results.append(row_dict)
print(f"第{i}行: {row_dict}")
return dict_results
except Exception as e:
print(f"查询失败: {str(e)}")
raise
finally:
# 确保关闭连接
if 'cursor' in locals():
cursor.close()
if 'conn' in locals():
conn.close()
def sync_query_tencent_cloud_data(config, sql, params, result_queue, task_id):
"""
同步查询腾讯云TDLC数据(兼容单/多线程)
:param config: TDLC连接配置
:param sql: 含%s占位符的SQL语句
:param params: SQL参数列表(用于替换%s
:param result_queue: 线程安全的结果队列(单线程传None)
:param task_id: 任务ID(区分不同查询,单线程可传任意字符串)
"""
conn = None
cursor = None
try:
# (原连接/执行SQL逻辑完全不变)
conn = tdlc_connector.connect(
**config,
engine_type=constants.EngineType.SPARK,
result_style=constants.ResultStyles.LIST
)
cursor = conn.cursor()
# print(f"[线程-{task_id}] 执行SQL: {sql} | 参数: {params}")
cursor.execute(sql, params)
columns = [desc[0] for desc in cursor.description] if cursor.description else []
results = cursor.fetchall()
dict_results = [dict(zip(columns, row)) for row in results]
# ===== 仅新增:判断队列是否为空,兼容单线程 =====
if result_queue is not None:
# 多线程:结果入队
result_queue.put({
"task_id": task_id,
"success": True,
"data": dict_results,
"error": None
})
else:
# 单线程:直接返回结果(新增返回逻辑)
return {
"success": True,
"data": dict_results,
"error": None
}
except Exception as e:
error_info = f"{str(e)}\n{traceback.format_exc()}"
print(f"[线程-{task_id}] 查询失败: {error_info}")
# ===== 同样新增:队列空判断 =====
if result_queue is not None:
result_queue.put({
"task_id": task_id,
"success": False,
"data": None,
"error": error_info
})
else:
return {
"success": False,
"data": None,
"error": error_info
}
finally:
# (原关闭连接逻辑完全不变)
if cursor:
try:
cursor.close()
except Exception as e:
print(f"[线程-{task_id}] 关闭游标失败: {str(e)}")
if conn:
try:
conn.close()
except Exception as e:
print(f"[线程-{task_id}] 关闭连接失败: {str(e)}")