如何在Python中实时捕获Redshift存储过程循环的RAISE输出
解决方案
redshift_connector原生支持捕获Redshift存储过程中RAISE INFO的输出,无需依赖临时表或查询系统视图,直接通过游标对象的messages属性即可获取这些信息,进而转换为DataFrame。
实现代码
import redshift_connector import pandas as pd # 建立Redshift连接 conn = redshift_connector.connect( host='xyz-cluster.abc.region.redshift.amazonaws.com', database='your_database', user='your_username', password='your_password' ) cursor = conn.cursor() # 执行目标存储过程 cursor.execute("CALL public.record_example();") # 提取存储过程输出的INFO消息 proc_outputs = cursor.messages # 解析消息,提取eventid字段 parsed_records = [] for msg in proc_outputs: # 匹配并提取eventid值,根据你的RAISE格式调整拆分逻辑 if "eventid = " in msg: event_id = msg.split("eventid = ")[-1].strip() parsed_records.append({"eventid": event_id}) # 转换为Pandas DataFrame result_df = pd.DataFrame(parsed_records) # 查看结果 print(result_df) # 关闭连接 conn.close()
关键说明
cursor.messages返回的是字符串列表,每个元素对应一条RAISE INFO的输出内容- 若你的
RAISE语句输出格式不同,只需修改字符串拆分的逻辑即可适配 - 该方法无需额外中间步骤,实时捕获输出,完全符合需求
内容的提问来源于stack exchange,提问作者marcin2x4
相关产品推荐
相关产品推荐

