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

