为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕雪6442864 2023-03-16 09:37:26
我在 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


查看完整回答
反对 回复 2023-03-16
  • 1 回答
  • 0 关注
  • 70 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号