Фильтрация или множественные числа в sqlalchemy - PullRequest
0 голосов
/ 12 мая 2018

У меня есть список таких кортежей:

l = [
     (100, 230),
     (10, 12),
     (7,1320),
     ...
    ]

Я хочу сгенерировать запрос в SQLAlchemy о том, что поле value в моей таблице находится между 100 , 230 или 10, 12 или 7, 1320 и так далее.

мой стол выглядит так:

id  | value
----|------
1   | 120
2   | 2
3   | 9
4   | 1245
5   | 4512

в этом случае я хочу эти идентификаторы: 1,3,4.
Я сделал что-то подобное, но я не могу выполнить часть or, поэтому он просто фильтрует строки, соответствующие всем критериям

 q = session.query(Table.value)
 for f in l:
     q = q.filter((Table.value.between(f[0], f[1])))

Я использую Python3.6 .

1 Ответ

0 голосов
/ 12 мая 2018

SQLAlchemy предоставляет or_ для объединения предложений фильтра:

from sqlalchemy import or_
...
q = session.query(Table.id)
q = q.filter(or_(Table.value.between(100, 230), Table.value.between(10, 12)))

В соответствии с документацией , or_ фактически получает переменное количество предложений, поэтому вы можете использовать понимание списка +метод распаковки для передачи границ фильтра следующим образом:

q = q.filter(or_(*[Table.value.between(left, right) for left, right in l]))

* - это оператор распаковки, он будет распаковывать аргументы из списка или кортежа и передавать их как отдельные позиционные аргументывызов функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...