2

我正在运行一些查询,从它们的执行中打印运行时统计信息。

它是通过 print('message') 在 sql 脚本中使用来完成的。

我希望在通过 pymssql 调用过程/脚本时看到这些消息。

conn = pymssql.connect(server, user, password, "tempdb")
cursor = conn.cursor()
cursor.execute("print('message')")
conn.commit()

上面的脚本没有返回任何内容,我找不到任何关于如何让该打印显示在控制台输出中的提示。

4

3 回答 3

2

找到了一个解决方案,让我仍然使用 pymssql 并获取打印消息。 pymssql.Connection实际上在_mssql.MSSQLConnection内部使用。这意味着您可以通过访问该内部对象来使用此示例。

connection = pymssql.connect(server='server_address', database='db_name')
connection._conn.set_msghandler(my_msg_handler)  # Install our custom handler

其中 my_msg_handler 与pmssql wiki中的对象类型相同。访问内部对象并不理想,但如果您不想使用不同的库并且需要获取 SQL 打印,这是我发现的唯一方法。

于 2017-12-19T12:40:19.753 回答
0

为了在 pymssql 中将某些内容打印到控制台,您不需要将打印内容放在执行函数中。你可以简单地使用

print("message")

所以你的代码将是

conn = pymssql.connect(server, user, password, "tempdb")
cursor = conn.cursor()
print("message")
conn.commit()
于 2017-11-20T16:09:53.497 回答
0

我不相信有办法,但你可以重构你的 SQL。例如:

DECLARE @my_var AS VARCHAR(200)
PRINT 'Setting a variable...'
SET @my_var = 'this'
PRINT 'I am some output'
SELECT * FROM my_table WHERE this = @my_var

可以重构为这样的:

DECLARE @my_var AS VARCHAR(200)
DECLARE @messages AS VARCHAR(MAX)
SET @messages = @messages + 'Setting a variable...'
SET @my_var = 'this'
SET @messages = @messages + 'I am some output'
SELECT @messages, * FROM my_table WHERE this = @my_var

祝你好运!

于 2017-11-22T02:43:03.267 回答