1

我有一个接收可选参数的函数。我在这个函数中查询一个数据库表。

我想要的是:

如果指定了可选参数,我想在我的数据库查询中添加另一个额外的 .filter() 。

我的查询行已经很长了,所以我不想做 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 回答