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)}") |