我有一个关键字列表,其中包含未知数量的元素,例如:
['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')
虽然看起来不是可以通过编程方式构建的……
我该如何解决这个问题?
答案 0 :(得分:1)
使用reduce和标准库中的“ or_”运算符:
clauses = [
(T.name ** 'key1'),
(T.name ** 'key2'),
(T.name ** 'key3')]
expr = reduce(operator.or_, clauses)
query = T.select().where(expr)