sqlalchemy过滤多个列

如何组合两列并应用滤镜? 例如,我想同时search“名字”和“姓氏”列。 如果只search一列,我就是这么做的:

query = meta.Session.query(User).filter(User.firstname.like(searchVar)) 

您可以使用SQLAlchemy的or_函数在多个列中进行search(下划线有必要与Python自己区分)。

这是一个例子:

 from sqlalchemy import or_ query = meta.Session.query(User).filter(or_(User.firstname.like(searchVar), User.lastname.like(searchVar))) 

您可以简单地多次调用filter器:

 query = meta.Session.query(User).filter(User.firstname.like(searchVar1)). \ filter(User.lastname.like(searchVar2)) 

有很多方法可以做到这一点:

使用filter(和运营商)

 query = meta.Session.query(User).filter( User.firstname.like(search_var1), User.lastname.like(search_var2) ) 

使用filter_by(和运算符)

 query = meta.Session.query(User).filter_by( firstname.like(search_var1), lastname.like(search_var2) ) 

链接filter(和操作符)

 query = meta.Session.query(User).\ filter_by(firstname.like(search_var1)).\ filter_by(lastname.like(search_var2)) 

使用or_()或者and_()而不是()

 from sqlalchemy import and_, or_, not_ query = meta.Session.query(User).filter( and_( User.firstname.like(search_var1), User.lastname.like(search_var2) ) )