2017-11-20 14 views
1

Ich führe einige Abfragen, die Laufzeitstatistiken aus ihrer Ausführung drucken.Wie bekomme ich die sql Print-Nachricht mit Pymssql

Es ist durch print('message') innerhalb des SQL-Skript verwendet.

Ich würde diese Meldungen beim Aufruf der Prozeduren/Skripts durch Pymssql sehen wollen.

Oben Skript gibt nichts zurück, und ich kann keine Tipps finden, wie dieser Druck in der Konsolenausgabe angezeigt wird.

Antwort

0

Gefunden eine Lösung, die mich immer noch pymssql verwenden und die Druckmeldungen erhalten. pymssql.Connection verwendet intern intern _mssql.MSSQLConnection. Dies bedeutet, dass Sie this Beispiel verwenden können, indem Sie auf dieses interne Objekt zugreifen.

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

wo der my_msg_handler die gleiche Art von Objekt, wie in pmssql wiki ist. Der Zugriff auf interne Objekte ist nicht ideal, aber es ist die einzige Möglichkeit, die ich gefunden habe, wenn Sie keine andere Bibliothek verwenden und die SQL-Drucke abrufen möchten.

0

Um in pymssql etwas in die Konsole zu drucken, müssen Sie den Ausdruck nicht in die Execute-Funktion einfügen. verwenden Sie einfach

print("message") 

so wird Ihr Code

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

Lassen Sie mich umformulieren, ich habe einen bestehenden Prozess in SQL, der Drucke hat, und ich muss diese in der Konsolenausgabe sehen. –

0

Ich glaube nicht, sein es einen Weg gibt, aber Sie können Ihre SQL Refactoring. Zum Beispiel:

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 

Könnte so etwas wie dieses Refactoring zu sein:

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 

Viel Glück!

+1

Danke für die Antwort, gute Idee. Leider ist dies eine CI-Lösung für eine Datenbank mit über 6000 Skripten zu unterstützen, also .... Ich bin nicht überzeugend, alles zu refaktorieren :) Beim Versuch, diese Arbeit zu machen, hatte ich gelernt, dass _mssql, Das ist ein Teil des Pymssql-Pakets, kann die Nachrichten tatsächlich zurückgeben, aber in diesem Fall habe ich Probleme mit der integrierten Anmeldung. Ich werde einige Informationen veröffentlichen, wenn ich eine Lösung finde. –