teg*_*ggy 57 python sql database sqlalchemy
如何组合两列并应用过滤器?例如,我想同时搜索"firstname"和"lastname"列.如果只搜索一列,我就是这样做的:
query = meta.Session.query(User).filter(User.firstname.like(searchVar))
Run Code Online (Sandbox Code Playgroud)
Dav*_*one 56
你可以简单地filter多次打电话:
query = meta.Session.query(User).filter(User.firstname.like(searchVar1)). \
filter(User.lastname.like(searchVar2))
Run Code Online (Sandbox Code Playgroud)
gcl*_*lj5 54
您可以使用SQLAlchemy的or_函数在多个列中进行搜索(下划线是将其与Python自己区分开来的必要条件or).
这是一个例子:
from sqlalchemy import or_
query = meta.Session.query(User).filter(or_(User.firstname.like(searchVar),
User.lastname.like(searchVar)))
Run Code Online (Sandbox Code Playgroud)
Vla*_*den 48
有很多方法可以做到:
使用过滤器(和运算符)
query = meta.Session.query(User).filter(
User.firstname.like(search_var1),
User.lastname.like(search_var2)
)
Run Code Online (Sandbox Code Playgroud)
使用filter_by(和运算符)
query = meta.Session.query(User).filter_by(
firstname.like(search_var1),
lastname.like(search_var2)
)
Run Code Online (Sandbox Code Playgroud)
链接过滤器(和运算符)
query = meta.Session.query(User).\
filter_by(firstname.like(search_var1)).\
filter_by(lastname.like(search_var2))
Run Code Online (Sandbox Code Playgroud)
使用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)
)
)
Run Code Online (Sandbox Code Playgroud)
适用于多列的通用代码。如果需要在应用程序中有条件地实现搜索功能,也可以使用此方法。
search_key = 'abc'
search_args = [col.ilike('%%%s%%' % search_key) for col in ['col1', 'col2', 'col3']]
query = Query(table).filter(or_(*search_args))
session.execute(query).fetchall()
Run Code Online (Sandbox Code Playgroud)
注意:%%跳过 % 格式化查询非常重要。
| 归档时间: |
|
| 查看次数: |
70125 次 |
| 最近记录: |