132 lines
4.4 KiB
Python
132 lines
4.4 KiB
Python
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)}")
|