Wie drucke ich tatsächliche SQL-Abfragen mit Werten während des Debuggens in SQLAlchemy?

Mary-Kate Olsen
Freigeben: 2024-10-18 13:29:03
Original
272 Leute haben es durchsucht

How to Print Actual SQL Queries with Values During Debugging in SQLAlchemy?

SQLAlchemy-Abfragen debuggen: Tatsächliches SQL mit Werten drucken

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.

Allgemeiner Ansatz

In den meisten Fällen können Sie einfach str() für die SQLAlchemy-Anweisung aufrufen oder Abfrage:

print(str(statement))
Nach dem Login kopieren

Dies funktioniert sowohl für ORM-Abfragen (Abfrageobjekte) als auch für reine SQL-Anweisungen (select() usw.).

Engine-spezifische Kompilierung

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))
Nach dem Login kopieren

Oder, wenn Sie keine Engine haben, können Sie einen Dialekt angeben:

from sqlalchemy.dialects import postgresql
print(statement.compile(dialect=postgresql.dialect()))
Nach dem Login kopieren

Inlining gebundener Parameter

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}))
Nach dem Login kopieren

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.

Benutzerdefinierte Typdekoratoren

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})"
Nach dem Login kopieren

Mit diesem Dekorator können Sie komplexe Werte einbinden:

print(tab.select().where(tab.c.x > 5).compile(compile_kwargs={"literal_binds": True}))
Nach dem Login kopieren

was eine Ausgabe wie folgt ergibt:

SELECT mytable.x
FROM mytable
WHERE mytable.x > my_fancy_formatting(5)
Nach dem Login kopieren

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!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!