时间:2010-07-26 07:32:39

标签: python sql database sqlalchemy

4 个答案:

答案 0 :(得分:51)

您可以使用SQLAlchemy的or_ function搜索多个列(必须使用下划线将其与Python自己的or区分开来。)

以下是一个例子:

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

答案 1 :(得分:48)

您可以多次致电filter

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

答案 2 :(得分:37)

有很多方法可以做到:

使用过滤器(和操作员)

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)
    )

链接过滤器(和运算符)

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)
    )
)

答案 3 :(得分:2)

适用于多列的通用代码段。 如果需要在应用程序中有条件地实现搜索功能,也可以使用此方法。

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()

注意:%%对于跳过%格式化查询很重要。