Heim  >  Artikel  >  Backend-Entwicklung  >  Wie drucke ich SQL-Abfragen in SQLAlchemy mit tatsächlichen Werten?

Wie drucke ich SQL-Abfragen in SQLAlchemy mit tatsächlichen Werten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-18 13:24:30936Durchsuche

How to Print SQL Queries in SQLAlchemy with Actual Values?

SQL-Abfragen in SQLAlchemy mit tatsächlichen Werten abrufen

Bei der Verwendung von SQLAlchemy kann es nützlich sein, die tatsächlich ausgeführten SQL-Abfragen auszudrucken, einschließlich die spezifischen Werte, die verwendet werden, und nicht die abstrakten Bindungsparameter.

So erreichen Sie dies in SQLAlchemy:

<code class="python">print(str(statement))</code>

Dieser einfache Ansatz funktioniert sowohl für ORM-Abfrageobjekte als auch für select() oder andere Anweisungstypen. Wenn Sie die Abfrage so erhalten möchten, wie sie für einen bestimmten Dialekt oder eine bestimmte Engine kompiliert wurde, können Sie die entsprechenden Argumente an „compile()“ übergeben:

<code class="python">print(statement.compile(someengine))
print(statement.compile(dialect=postgresql.dialect()))</code>

Wenn Sie ORM-Abfrageobjekte verwenden, greifen Sie zunächst auf den .statement-Accessor zu Holen Sie sich die Methode „compile()“:

<code class="python">statement = query.statement
print(statement.compile(someengine))</code>

In Fällen, in denen Sie gebundene Parameter in die endgültige Zeichenfolge einfügen müssen, bietet SQLAlchemy hierfür nur begrenzte Unterstützung. Sie können das Flag „literal_binds“ verwenden, wenn Sie „compile()“ aufrufen:

<code class="python">print(s.compile(compile_kwargs={"literal_binds": True}))</code>

Dies funktioniert jedoch nur für einfache Typen wie Ganzzahlen und Strings. Für benutzerdefinierte Typen müssen Sie einen TypeDecorator mit einer TypeDecorator.process_literal_param-Methode verwenden, um eine benutzerdefinierte Formatierung bereitzustellen:

<code class="python">print(
    tab.select().where(tab.c.x > 5).compile(
        compile_kwargs={"literal_binds": True})
)</code>

Dieser Ansatz ermöglicht das Inline-Rendering benutzerdefinierter Typen in der resultierenden SQL-Abfragezeichenfolge.

Das obige ist der detaillierte Inhalt vonWie drucke ich SQL-Abfragen in SQLAlchemy mit tatsächlichen Werten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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