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!