我在 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
提交
取消