Heim >Backend-Entwicklung >Python-Tutorial >Wie drucke ich tatsächliche SQL-Abfragen mit Werten während des Debuggens in SQLAlchemy?
Beim Debuggen von SQLAlchemy-Ausdrücken ist es wertvoll, die tatsächlich ausgeführte SQL-Abfrage zu sehen, einschließlich spezifischer Werte anstelle von Bindungsparametern . Obwohl SQLAlchemy hierfür keine explizite Methode bereitstellt, gibt es einige Möglichkeiten, dies zu erreichen.
In den meisten Fällen können Sie einfach str() für die SQLAlchemy-Anweisung aufrufen oder Abfrage:
print(str(statement))
Dies funktioniert sowohl für ORM-Abfragen (Abfrageobjekte) als auch für reine SQL-Anweisungen (select() usw.).
Wenn Sie die Anweisung für eine bestimmte Datenbank-Engine kompilieren müssen, können Sie die Methode „compile()“ verwenden:
print(statement.compile(some_engine))
Oder, wenn Sie keine Engine haben, können Sie einen Dialekt angeben:
from sqlalchemy.dialects import postgresql print(statement.compile(dialect=postgresql.dialect()))
Unter bestimmten Umständen möchten Sie möglicherweise gebundene Parameter in die endgültige SQL-Zeichenfolge einbinden. Dies kann mit dem Flag literal_binds erreicht werden:
print(statement.compile(compile_kwargs={"literal_binds": True}))
Beachten Sie, dass dies nur für Basistypen wie Ganzzahlen und Zeichenfolgen unterstützt wird. Für komplexere Typen müssen Sie möglicherweise einen benutzerdefinierten Typdekorator erstellen.
Um das Inline-Rendering nicht unterstützter Typen zu unterstützen, können Sie einen benutzerdefinierten Typdekorator mit einer Methode „process_literal_param“ erstellen:
class MyFancyType(TypeDecorator): ... def process_literal_param(self, value, dialect): return f"my_fancy_formatting({value})"
Mit diesem Dekorator können Sie komplexe Werte einbinden:
print(tab.select().where(tab.c.x > 5).compile(compile_kwargs={"literal_binds": True}))
was eine Ausgabe wie folgt ergibt:
SELECT mytable.x FROM mytable WHERE mytable.x > my_fancy_formatting(5)
Das obige ist der detaillierte Inhalt vonWie drucke ich tatsächliche SQL-Abfragen mit Werten während des Debuggens in SQLAlchemy?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!