SQLAlchemy:揭開真正的查詢
使用 SQLAlchemy 時,檢查正在執行的實際 SQL 查詢可能很有價值。雖然 SQLAlchemy 通常依賴綁定參數,但有一些方法可以產生對應的 SQL 語句,包括實際值。
通用解決方案
在大多數情況下,您可以輕鬆地取得SQLAlchemy 語句或查詢的SQL 字串表示形式:
<code class="python">import sqlalchemy as sa print(str(statement))</code>
這適用於ORM 查詢和select() 或其他語句。如果需要,您可以將語句編譯為特定的方言或引擎:
<code class="python">print(statement.compile(someengine))</code>
或不指定引擎:
<code class="python">from sqlalchemy.dialects import postgresql print(statement.compile(dialect=postgresql.dialect()))</code>
內聯綁定參數
為了在SQL 字串中包含實際值而不是綁定參數,SQLAlchemy 透過編譯_kwargs 中的'literal_binds' 標誌提供有限的支援:
<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>
但是,此方法僅適用於基本型別和可能無法處理沒有預先指派值的綁定參數。對於自訂類型,您可以使用 process_literal_param 方法實作 TypeDecorator:
<code class="python">class MyFancyType(TypeDecorator): def process_literal_param(self, value, dialect): return "my_fancy_formatting(%s)" % value</code>
這允許您根據您的特定要求自訂值的呈現。
以上是如何在SQLAlchemy中取得真實的SQL查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!