我在 SQLAlchemy 中編寫了以下查詢:session.query(matches_atp).filter(matches_atp.ID_M == 668)WHERE當我檢查它時,我得到一個奇怪的條款:WHERE belgarath.matches_atp.`ID_M` = %(ID_M_1)s當我切換到:session.query(matches_atp).filter(matches_atp.ID_M == None)然后一切看起來都很好:WHERE belgarath.matches_atp.`ID_M` IS NULL為什么我得到的%(ID_M_1)s不是668?如果這不是一個簡單的答案,那么我將發布 MRE 的代碼。
1 回答

藍山帝景
TA貢獻1843條經驗 獲得超7個贊
那是一個占位符。然后,您的數據庫驅動程序將在執行時將其替換為正確的值。換句話說,它符合預期。您也應該在手動“原始”查詢中使用占位符,而不是使用格式化等將值內聯到字符串,這是注入和容易出錯的。例如:
from sqlalchemy import text
# Wrap with text() in order to be able to use named placeholder style no
# matter which driver is in use underneath SQLA.
stmt = text("SELECT * FROM foo WHERE bar = :bar")
engine.execute(stmt, {"bar": 1})
SQLAlchemy 在生成而不是 的== None查詢編譯器中有一個例外,這很少(如果有的話)有意義。IS NULL= NULL
添加回答
舉報
0/150
提交
取消