2012-12-13 14 views
7

Wie bekomme ich die Ausgabe von der sql_query?sql print Aussagen von Pyodbc

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 

Bisher denke ich, ein SQL-Druck aus Band von den üblichen strukturierten Antworten ist?

http://www.easysoft.com/developer/languages/perl/sql_server_unix_tutorial.html#print_statement_status_messages hat etwas, was ich in Perl zu tun versuche.

Das nächste, was ich sehen kann, ist das optionale: http://www.python.org/dev/peps/pep-0249/#cursor-messages Also ich denke, es ist einfach nicht implementiert?

+0

Auf der TDS-Ebene. PRINT und RAISERROR() senden beide Query-Ausgaben "in band" mit den Resultsets. Die Daten sind jedoch keine TDS-Ergebnismenge, und es scheint, dass der Treiber nicht richtig damit umgehen kann. –

Antwort

0

Verwenden Sie RAISERROR über PRINT. Verwenden Sie es mit NOWAIT, um sofort ausgegeben zu werden. Ich weiß nicht, wie man das in Python behandelt, aber in ADO.NET können Sie das Ereignis InfoMessage auf SqlConnection verwenden. Vielleicht gibt es in Python etwas Ähnliches.

0

Beim Ausführen der Abfrage PRINT 'Hello World' wird die Ausgabe als Konsolenausgabe (String) zurückgegeben, und Fetchall überprüft die Ergebnismenge (Objekt) von einer Abfrage. RAISERROR ist eine Fehlerbedingung und kann den Prozess beenden. Ich sage nicht, dass dies keine Lösung ist, aber vielleicht möchten Sie nur ein Feedback ausdrucken, ohne einen Fehler zu verursachen.

Ich denke, das Ergebnis erreichen können, die Sie suchen nach

[PRINT ‚Hallo Welt‘] Wechsel zu [SELECT ‚Hallo Welt‘]

Ich denke, das eine einzige Reihe von Daten schaffen In einem Ergebnis, das mit dem gewünschten Text festgelegt wurde, sollte dieser in fetchall angezeigt werden und sehen, ob Sie die Ergebnisse erhalten, die Sie erwarten.

Hoffe, dass hilft Ihnen eine Alternative, die Sie ausprobieren können!