2012-12-13 35 views
7

如何從sql_query獲取輸出?來自pyodbc的sql打印語句

import pyodbc 

sql_query = "print 'Hello World'" 

conn = pyodbc.connect("DRIVER={SQL Server}; 
SERVER=myserver; 
DATABASE=mydatabase; 
UID=myusername; 
PWD=mypassword") 

cur = conn.cursor() 

cur.execute(sql_query) 
cur.commit() 

for row in cursor.fetchall(): 
    print row 

到目前爲止,我認爲一個SQL打印與通常的結構響應帶外的?

http://www.easysoft.com/developer/languages/perl/sql_server_unix_tutorial.html#print_statement_status_messages與我在Perl中想要做的事情類似。

我能看到的最接近的是可選項: http://www.python.org/dev/peps/pep-0249/#cursor-messages所以我想這只是沒有實現?

+0

在TDS級別。 PRINT和RAISERROR()都將結果集的「帶內」查詢輸出發送出去。但是,數據不是TDS結果集,而且確實出現驅動程序無法正確處理它。 –

回答

0

使用RAISERROR over PRINT。使用它與NOWAIT立即得到輸出。我不知道如何在Python中處理這個問題,但在ADO.NET中,您可以使用SqlConnection上的InfoMessage事件。也許在Python中有類似的東西。

0

運行查詢PRINT'Hello World'時,輸出作爲控制檯輸出(字符串)返回,並且fetchall正在查看查詢中的結果集(對象)。 RAISERROR是一種錯誤狀態,可以阻止該進程。我並不是說這不是一個解決方案,但也許你只是想打印一些反饋而不會產生錯誤狀態。

我想你可以實現你通過改變

[打印的「Hello World」]來尋找我認爲這將創建數據的單行結果[選擇的「Hello World」]

在你想要的文本結果集中,它應該顯示在fetchall中,看看你是否得到了你期望的結果。

希望能幫助您提供另一種選擇,您可以嘗試!