Запросы в алхимии 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)`
Другие вопросы по тегам