SQLAlchemy:如果搜索值为None,如何避免查询过滤器
有没有一种简单的方法可以处理以下情况:
def queryByAttr(attr1,attr2=None):
if attr2 is None:
session.query(Foo).filter(Foo.attr1==attr1)
else:
session.query(Foo).filter(Foo.attr1==attr1).filter(Foo.attr2==attr2)
2 个回答
0
也可以使用。
def queryByAttr(attr1, attr2=None):
return (session.query(Foo).filter((*[Foo.attr1==attr1, Foo.attr2==attr2] if attr2 else *[Foo.attr1==attr1])))
8
这里有一个更易读的多行代码,使用了链式调用:
def queryByAttr(attr1, attr2=None):
q = session.query(Foo).filter(Foo.attr1 == attr1)
if attr2 is not None:
q = q.filter(Foo.attr2 == attr2)
return q
你也可以把它写成一个(相对较长的)单行代码:
def queryByAttr(attr1, attr2=None):
return (session.query(Foo).filter(Foo.attr1 == attr1)) if attr2 is None else (session.query(Foo).filter(Foo.attr1 == attr1).filter(Foo.attr2 == attr2))
前提是你不需要查询那些Foo
对象,它们的attr2
值是NULL
。