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