为何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
相关产品推荐
相关产品推荐

