1

文字列のリストと、リスト内のすべての文字列の組み合わせまたは組み合わせに基づくクエリを取得しようとしています。このようなことが以下でできるかどうか知りたいです。

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 のサポートされていないオペランド型

実際には、ビットごとの OR 記号を使用してこれを記述するつもりはありません... "|" しかし、ANDでそれを行うことができれば、ORでも機能するはずです。

4

1 に答える 1

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)`
于 2015-08-16T09:46:31.753 に答える