You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何SQLAlchemy构建SELECT语句时第二种写法不生效?

问题原因及解决方法

这是因为SQLAlchemy的查询对象是不可变的——调用.where()这类方法不会修改原有的查询对象,而是返回一个包含新条件的新查询对象。

代码差异分析

  • 第一段代码中,db.select(Product).where(Product.id == 1)直接将.where()返回的新查询对象赋值给了stmt,所以最终stmt包含WHERE子句。
  • 第二段代码里,stmt.where(Product.id == 1)确实生成了带WHERE条件的新对象,但你没有把这个新对象重新赋值给stmt,原stmt依然是最初创建的无过滤条件的查询对象,因此打印结果不包含WHERE子句。

修正写法

只需把.where()返回的新对象重新赋值给stmt即可:

stmt = db.select(Product)
stmt = stmt.where(Product.id == 1)  # 接收新的查询对象
print(stmt)

内容的提问来源于stack exchange,提问作者Victor Aurélio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 02:48:09