Построение ИЛИ ГДЕ программно в Peewee - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть список ключевых слов с неизвестным количеством элементов, таких как:

['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 голосов
/ 05 ноября 2018

Используйте Reduce и оператор "or_" из стандартной библиотеки:

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