在 SQLAlchemy 中列印實際的 SQL 查詢
在 SQLAlchemy 中執行 SQL 查詢涉及綁定參數以防止 SQL 注入攻擊。然而,取得實際的 SQL 查詢(包括值)可能具有挑戰性。
一般解
以字串形式擷取SQL 查詢的最簡單方法是使用str() 函數:
<code class="python">print(str(statement)) # for both ORM Query and SQL statements</code>
綁定參數實作
預設情況下,出於安全原因,SQLAlchemy 會綁定參數。您可以使用compile_kwargs中的literal_binds標誌來抑制此行為:
<code class="python">from sqlalchemy.dialects import postgresql print( statement.compile(compile_kwargs={"literal_binds": True}) )</code>
請注意,文字綁定僅支援整數和字串等基本類型。
自訂參數轉換
如果您需要轉換更複雜的類型,您可以使用process_literal_param 方法建立自訂TypeDecorator:
<code class="python">class MyFancyType(TypeDecorator): impl = Integer def process_literal_param(self, value, dialect): return "my_fancy_formatting(%s)" % value print( tab.select().where(tab.c.x > 5).compile( compile_kwargs={"literal_binds": True}) )</code>這將產生以下查詢:
<code class="sql">SELECT mytable.x FROM mytable WHERE mytable.x > my_fancy_formatting(5)</code>
以上是如何取得SQLAlchemy中實際執行的SQL查詢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!