init
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
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)}")
|
||||
Reference in New Issue
Block a user