2012-12-13 6 views
7

Come ottengo l'output dallo sql_query?sql print statements da 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 

Finora penso che una stampa SQL è fuori banda dalle solite risposte strutturate?

http://www.easysoft.com/developer/languages/perl/sql_server_unix_tutorial.html#print_statement_status_messages ha qualcosa di simile a quello che sto cercando di fare in Perl.

Il più vicino che riesco a vedere è l'opzionale: http://www.python.org/dev/peps/pep-0249/#cursor-messages Quindi immagino che non sia stato appena implementato?

+0

Al livello TDS. PRINT e RAISERROR() inviano entrambi l'output della query "in banda" con i gruppi di risultati. Tuttavia, i dati non sono un set di risultati TDS e sembra che il driver non lo gestisca correttamente. –

risposta

0

Utilizzare RAISERROR su STAMPA. Usalo con NOWAIT per ottenere immediatamente l'output. Non so come gestirlo in python, ma su ADO.NET è possibile utilizzare l'evento InfoMessage su SqlConnection. Forse c'è qualcosa di simile in Python.

0

Quando si esegue la query PRINT 'Hello World', l'output viene restituito come output della console (stringa) e fetchall sta riesaminando il set di risultati (oggetto) da una query. RAISERROR è una condizione di errore e può interrompere il processo. Non sto dicendo che questa non è una soluzione, ma forse vuoi solo stampare un feedback senza creare una condizione di errore.

penso che si può ottenere il risultato che stai cercando, modificando

[STAMPA 'Ciao mondo'] a [SELECT 'Ciao mondo']

Credo che questo creerà una singola riga di dati in un risultato impostato con il testo desiderato, dovrebbe apparire in fetchall e vedere se ottieni i risultati che ti aspetti.

La speranza che aiuta a fornire un'alternativa si può provare!