Запросы в алхимии SQL с помощью конъюнкций
Я пытаюсь взять список строк и запрос на основе или комбинации всех строк в списке. Я хочу знать, можно ли сделать что-то подобное ниже.
def filters(self,filter_company = ["DPL"]):
print "TEST"
# Company Filter
company_conj = 1 ## Bitwise 1 with AND will not effect other AND bits
for c in filter_company:
company_conj = (company_conj) & (Exception.company == c) ## Create co
qrty_exceptions = session.query(Exception).filter(company_conj) ## Query by conjunction
Так что, в основном, я перебираю каждый элемент в списке и пытаюсь соединиться, конкатинируя. Дело в том, что я не знаю, сколько элементов будет в списке... но я хочу логически поразрядно И их вместе, чтобы они все образовали соединение. Я получаю следующую ошибку:
TypeError: неподдерживаемый тип (ы) операндов для &: 'int' и BinaryExpression
На самом деле, я имею в виду не писать это с помощью побитового символа ИЛИ... "|" но я думаю, что если вы можете сделать это для И, то это должно работать и для ИЛИ.
1 ответ
Решение
Я думаю, что пример ниже должен помочь вам:
from sqlalchemy import or_, and_
company_filters = ["Filter1", "Filter2"] # as many as you like
clauses = [(Exception.company == c) for c in company_filters]
q = session.query(Exception)
q = q.filter(and_(*clauses)) # or `or_(*clauses)`