为什么我生成的 WHERE 子句不正确?

我在 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 的代码。


慕雪6442864
浏览 71回答 1
1回答

蓝山帝景

那是一个占位符。然后,您的数据库驱动程序将在执行时将其替换为正确的值。换句话说,它符合预期。您也应该在手动“原始”查询中使用占位符,而不是使用格式化等将值内联到字符串,这是注入和容易出错的。例如: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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python