如何合并两列并应用过滤器?例如,我要同时搜索“名字”和“姓氏”列。如果仅搜索一列,这就是我的操作方式:
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)
吗?