2012-12-13 20 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

PRINTよりRAISERRORを使用してください。すぐに出力を得るにはNOWAITと一緒に使用してください。私はこれをPythonで処理する方法はわかりませんが、ADO.NETではSqlConnectionでInfoMessageイベントを使用できます。たぶん、Pythonに似たようなものがあるかもしれません。

0

PRINT 'Hello World'の出力はコンソール出力(文字列)として出力され、fetchallはクエリから結果セット(オブジェクト)を見直しています。 RAISERRORはエラー状態であり、プロセスを停止できます。私はこれが解決策ではないと言っているわけではありませんが、エラー条件を作成せずにいくつかのフィードバックを出力したいだけかもしれません。

私はあなたがに[PRINT「Hello Worldの」]

を変更することで、探している結果を達成することができると思い

[「Hello Worldのを」SELECT]

私は、これはデータの単一の行を作成すると思いますあなたが望むテキストを含む結果セットでは、fetchallに表示され、期待している結果が得られるかどうかを確認する必要があります。

あなたが試すことのできる代替品を提供するのに役立つことを願っています!