1

オプションの引数を受け取る関数があります。この関数内でデータベース テーブルをクエリしています。

私が欲しいのは:

オプションの引数が指定されている場合、別の追加の .filter() をデータベース クエリに追加したいと考えています。

私のクエリ行はすでにかなり長いので、クエリ全体を 2 回繰り返す If .. else .. は実行したくありません。

これを行う方法は何ですか?

以下は私のクエリの例です。my_val が指定されている場合は、別のフィルタリング行を追加する必要があります。

def my_def (my_val):
    query = Session.query(Table1, Table2).\
            filter(Table1.c1.in_(some_val)).\
            filter(Table1.c2 == 113).\
            filter(Table2.c3 == val1).\
            filter(Table1.c4 == val2).\
            filter(Table2.c5 == val5).\
            all()
4

1 に答える 1

4

次のように、クエリ セットで .all() メソッドを呼び出すのを待つことができます。


def my_def (my_val=my_val):
    query = Session.query(Table1, Table2).\
            filter(Table1.c1.in_(some_val)).\
            filter(Table1.c2 == 113).\
            filter(Table2.c3 == val1).\
            filter(Table1.c4 == val2).\
            filter(Table2.c5 == val5)
    if my_val:
        query = query.filter(Table1.c6 == my_val)
    return query.all()

于 2012-10-17T17:33:40.180 に答える