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

Peewee中select的where或与组合查询条件不生效问题求助

Peewee多条件查询不生效问题解决方案

问题根因

你的错误是Python运算符优先级导致的:位运算符|、&的优先级远高于比较运算符==,你写的原始查询代码实际执行的运算逻辑和预期完全不符。

以你写的Book.type == "Pocket" | (xxx)为例,Python会优先计算"Pocket" | (xxx)的结果,再将该结果和Book.type做等值判断,自然无法匹配到符合Hard_cover+threaded条件的图书,去掉括号后运算逻辑偏差更大,就会出现无返回结果的情况。

正确写法

你需要把所有等值比较的条件单独用括号包裹,确保运算顺序符合你的预期:

Books.select(
).where(
    Book.title.contains("Some title")
).where(
    (Book.type == "Pocket") |
    (
        (Book.type == "Hard_cover") &
        (Book.binding == "threaded")
    )
)

你也可以将多个AND关系的条件合并到同一个where方法中,写法更简洁:

Books.select().where(
    Book.title.contains("Some title"),
    (Book.type == "Pocket") | ((Book.type == "Hard_cover") & (Book.binding == "threaded"))
)

内容的提问来源于stack exchange,提问作者Anders Breid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:45:01