更容易过滤sqlalchemy中的任何内容?

vuktfyat  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(257)

我有两张tablet1和t2。t1包含列“name”,而t2不包含。
我想打电话

def get(T, query_name): 
    return session.query(T).filter(T.name == query_name).all()

此函数的唯一调用是:get(t1,“some name”)或get(t2,null)——对于第二种情况,我希望忽略过滤器
解决方案是:

def get(T, query_name): 
    if query_name != NULL: 
        return session.query(T).filter(T.name == query_name).all()
    else: 
        return session.query(T).all()

上面的代码还不错,但我经常重复这些代码(每次我查询时),我想知道是否还有其他简洁的方法。

eit6fx6z

eit6fx6z1#

设置默认参数。根本没有 NULL 在python中,您需要 None . 您可以按顺序构建查询,因此这可能是一种更好的模式,您可以为查询提供一个默认参数 query_name :

def get(T, query_name=None):

    data = session.query(T)
    if query_name is not None:
        data = data.filter(T.name == query_name)

    return data.all()

这与本例没有实质性的区别,但是如果您有很多可选参数,则会有很大的区别。

相关问题