首頁 >後端開發 >Python教學 >如何取得SQLAlchemy中實際執行的SQL查詢?

如何取得SQLAlchemy中實際執行的SQL查詢?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-18 13:15:031077瀏覽

How to Obtain the Actual SQL Query Executed in SQLAlchemy?

在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn