如何使用PyODBC获取SQL Server中RAISERROR或PRINT的输出消息
PyODBC获取SQL Server RAISERROR实时消息调整方案
你需要主动读取PyODBC连接对象存储的SQL Server通知消息,再按需要的格式输出即可,调整后的代码如下:
import pyodbc conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=ECH-DWPROD02;DATABASE=Test;Trusted_Connection=yes;') # 可选:开启自动提交避免事务缓冲导致消息延迟,按需开启即可 # conn.autocommit = True cursor = conn.cursor() # 执行前清空历史消息避免干扰 conn.messages = [] cursor.execute("SET NOCOUNT ON; RAISERROR('Test Message',0,1) WITH NOWAIT; select 1 as col1") # 优先输出所有通知消息 for msg in conn.messages: # 消息元组第二个元素为RAISERROR输出的文本,去除首尾空白后按要求加星号强调 print(f"*{msg[1].strip()}*") # 再输出结果集格式化内容 rows = cursor.fetchall() print("|col1|") print("|:-|") for row in rows: print(f"|{row[0]}|")
核心逻辑说明
- 低严重级别(0~10)的RAISERROR消息会被SQL Server识别为通知,配合
WITH NOWAIT参数会立即发送给客户端,不会等待整个查询执行完成 - PyODBC会将所有收到的通知消息按顺序存储在连接对象的
messages属性中,每个消息为(错误码, 消息文本)的元组结构 - 必须在读取结果集之前先遍历
messages属性,才能实现消息先输出的效果
内容的提问来源于stack exchange,提问作者user14518362
相关产品推荐
相关产品推荐

