Ich habe eine gespeicherte Prozedur in einer MySQL-Datenbank, die einfach eine Datumsspalte aktualisiert und das vorherige Datum zurückgibt. Wenn ich diese gespeicherte Prozedur vom MySQL-Client aus aufrufe, funktioniert es gut, aber wenn ich versuche, die gespeicherte Prozedur von Python mit MySQLdb aufzurufen, kann ich nicht den Rückgabewert erhalten.
Hier ist der Code für die gespeicherte Prozedur:
%Vor%Der Code, den ich verwende, um die gespeicherte Prozedur aufzurufen, sieht ähnlich aus:
%Vor%Ich weiß, dass Sie IN- und OUT-Parameter verwenden können, aber was ich anhand der MySQLdb-Dokumentation feststellen kann, ist mit MySQLdb nicht möglich. Hat jemand eine Ahnung, wie ich die Ergebnisse der gespeicherten Prozedur bekommen konnte?
Wenn ich es aus einem SQL-Tool ausführen, ist hier die Ausgabe:
%Vor%Wenn ich das Python-Skript ausführe, gibt es eine leere Menge zurück:
%Vor%Was ich tun musste, ist, den Python-Code zu ändern, um execute () anstelle von callproc () zu verwenden, und dann fetchone () zu verwenden, um die Ergebnisse zu erhalten. Ich beantworte es selbst, da die Antwort von mluebke nicht vollständig war (obwohl es hilfreich war!).
%Vor%Dies gibt mir die richtige Ausgabe:
%Vor% callproc
funktioniert auch gut, Sie müssen execute
nicht verwenden:
Aus der API-Dokumentation für die MySQLdb
-Bibliothek. Sie müssen cursor_obj.nextset()
aufrufen, bevor die Ergebnismenge angezeigt wird, die von der gespeicherten Prozedur zurückgegeben wird. Dies liegt daran, dass der Aufruf der gespeicherten Prozedur eine Ergebnismenge erstellt. Die von der gespeicherten Prozedur zurückgegebenen Ergebnismengen folgen.