從SQLAlchemy 運算式擷取原始、編譯的SQL
在SQLAlchemy 中,從表達式物件取得原始、編譯的SQL 查詢可能是一個挑戰。雖然表達式 API 提供了方便的接口,但它使底層 SQL 隱藏在視圖之外。
努力尋找參數
您已檢查了查詢。 _params 字典,但發現儘管查詢執行成功,但它還是空的。這是因為 SQLAlchemy 有意將參數封裝在查詢物件中。透過這樣做,它確保了與各種 DB-API 的兼容性。
使用文字綁定
但是,SQLAlchemy 文件透過使用literal_binds 提供了一種解決方法:
print(q.statement.compile(compile_kwargs={"literal_binds": True}))
這種方法允許您列印包含參數的查詢語句。但它僅適用於基本類型(例如整數、字串),不支援沒有預先定義值的 bindparam()。
安全警告
文件強烈建議不要在不受信任的輸入中使用此技術。 SQLAlchemy 的型別強制轉換機制並非萬無一失,可能會導致安全漏洞。
結論
雖然預設不直接公開,但可以從 SQLAlchemy 檢索原始的編譯 SQL使用literal_binds關鍵字參數的表達式。然而,在處理不受信任的數據時務必小心謹慎。
以上是如何從 SQLAlchemy 表達式中檢索原始編譯的 SQL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!