如何合并两列并应用过滤器?例如,我要同时搜索“名字”和“姓氏”列。如果仅搜索一列,这就是我的操作方式:
query = meta.Session.query(User).filter(User.firstname.like(searchVar))
如何合并两列并应用过滤器?例如,我要同时搜索“名字”和“姓氏”列。如果仅搜索一列,这就是我的操作方式:
query = meta.Session.query(User).filter(User.firstname.like(searchVar))
Answers:
有很多方法可以做到这一点:
使用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()或filter_by()(和运算符)
query = meta.Session.query(User).\
filter_by(firstname.like(search_var1)).\
filter_by(lastname.like(search_var2))
使用or_(),and_()和not()
from sqlalchemy import and_, or_, not_
query = meta.Session.query(User).filter(
and_(
User.firstname.like(search_var1),
User.lastname.like(search_var2)
)
)
filter_by文件说,它是通过关键字参数过滤:query(Foo).filter_by(bar='baz')。这与您在以上答案中使用的语法有何关系?
您可以简单地拨打filter多个电话:
query = meta.Session.query(User).filter(User.firstname.like(searchVar1)). \
filter(User.lastname.like(searchVar2))
filter()方法与在单个中使用多个条件(按or_或and_)的组合之间是否存在性能差异filter?
filter调用会像逻辑操作AND而不是逻辑操作OR吗?
您可以使用SQLAlchemy的or_函数在多列中进行搜索(下划线必须与Python的区别or)。
这是一个例子:
from sqlalchemy import or_
query = meta.Session.query(User).filter(or_(User.firstname.like(searchVar),
User.lastname.like(searchVar)))
|运算符来代替or_,例如- (User.firstname.like(searchVar)) | (User.lastname.like(searchVar)),但是您应该注意|优先级,如果没有括号,当与比较运算符混合使用时,它会产生非常意想不到的结果。
filter.or_( case1, case 2)吗?