在Peewee中以编程方式构建OR WHERE

时间:2018-11-04 16:51:43

标签: python where-clause peewee

我有一个关键字列表,其中包含未知数量的元素,例如:

['key1', 'key2', 'key3']

我需要使用Peewee构建查询,其中列名称必须为%LIKE% 列表中的任何一个单词。

SQL示例:

SELECT * 
FROM t 
WHERE name LIKE '%key1%' OR 
name LIKE '%key2%' OR
name LIKE '%key3%'

在文档上,看起来我可以像这样构建查询:

T.select().where(T.name ** 'key1' | T.name ** 'key2' | T.name ** 'key3')

虽然看起来不是可以通过编程方式构建的……

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用reduce和标准库中的“ or_”运算符:

clauses = [
    (T.name ** 'key1'),
    (T.name ** 'key2'),
    (T.name ** 'key3')]
expr = reduce(operator.or_, clauses)
query = T.select().where(expr)