SQLAlchemy: Die wahre Abfrage enthüllen
Bei der Arbeit mit SQLAlchemy kann es hilfreich sein, die tatsächlich ausgeführten SQL-Abfragen zu überprüfen. Während SQLAlchemy normalerweise auf Bind-Parametern basiert, gibt es Möglichkeiten, die entsprechenden SQL-Anweisungen einschließlich der tatsächlichen Werte zu generieren.
Allgemeine Lösung
In den meisten Fällen können Sie dies problemlos tun Erhalten Sie die SQL-String-Darstellung einer SQLAlchemy-Anweisung oder -Abfrage:
<code class="python">import sqlalchemy as sa print(str(statement))</code>
Dies funktioniert sowohl für ORM-Abfragen als auch für select() oder andere Anweisungen. Bei Bedarf können Sie die Anweisung in einen bestimmten Dialekt oder eine bestimmte Engine kompilieren:
<code class="python">print(statement.compile(someengine))</code>
oder ohne Angabe einer Engine:
<code class="python">from sqlalchemy.dialects import postgresql print(statement.compile(dialect=postgresql.dialect()))</code>
Inlining Bound Parameters
Um die tatsächlichen Werte anstelle von Bindungsparametern in den SQL-String aufzunehmen, bietet SQLAlchemy begrenzte Unterstützung durch das Flag „literal_binds“ in Compile_kwargs:
<code class="python">from sqlalchemy import table, column, select t = table('t', column('x')) s = select([t]).where(t.c.x == 5) print(s.compile(compile_kwargs={"literal_binds": True}))</code>
Dieser Ansatz funktioniert jedoch nur für Basistypen und kann Bindungsparameter ohne vorab zugewiesene Werte nicht verarbeiten. Für benutzerdefinierte Typen können Sie einen TypeDecorator mit einer Methode „process_literal_param“ implementieren:
<code class="python">class MyFancyType(TypeDecorator): def process_literal_param(self, value, dialect): return "my_fancy_formatting(%s)" % value</code>
Dadurch können Sie die Darstellung von Werten basierend auf Ihren spezifischen Anforderungen anpassen.
Das obige ist der detaillierte Inhalt vonWie erhalte ich die echte SQL-Abfrage in SQLAlchemy?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!