SQLAlchemy的查询过滤filter

07-03 1049阅读

要执行范围查询或模糊查询,可使用 SQLAlchemy 提供的运算符和函数来构建更复杂的过滤条件。下面是一些示例:

SQLAlchemy的查询过滤filter
(图片来源网络,侵删)

1. **范围查询(Range Query)**:可以使用 `between` 运算符来查询某个范围内的记录。

from sqlalchemy import between
# 查询年龄在 25 到 35 之间的记录
records = session.query(MyTable).filter(MyTable.age.between(25, 35)).all()

2. **模糊查询(Like Query)**:可以使用 `like` 函数进行模糊查询,使用 `%` 表示通配符。

from sqlalchemy import like
# 查询姓名以 'J' 开头的记录
records = session.query(MyTable).filter(MyTable.name.like('J%')).all()
# 查询姓名包含 'oh' 的记录
records = session.query(MyTable).filter(MyTable.name.like('%oh%')).all()

3. **逻辑运算符(Logical Operators)**:可以使用 `and_`、`or_` 和 `not_` 运算符组合多个过滤条件。

from sqlalchemy import and_, or_
# 查询年龄为 30 并且姓名以 'J' 开头的记录
records = session.query(MyTable).filter(and_(MyTable.age == 30, MyTable.name.like('J%'))).all()
# 查询年龄为 25 或者 30 的记录
records = session.query(MyTable).filter(or_(MyTable.age == 25, MyTable.age == 30)).all()
from sqlalchemy import and_, or_, not_
# 查询年龄在 25 到 35 之间,并且姓名以 'J' 开头,但排除姓为 'John' 的记录
records = session.query(MyTable).filter(and_(MyTable.age.between(25, 35), MyTable.name.like('J%'), not_(MyTable.name == 'John'))).all()

-----------

在使用SQLAlchemy时,`filter_by`和`filter`是两种常用的方法,用于对查询结果进行过滤。它们之间有一些区别:

1. **filter_by**:

   - `filter_by`方法用于基于指定的关键字参数进行过滤。

   - 它可以更简洁地指定过滤条件,但是无法处理复杂的条件。

   - 通常用于在简单情况下进行过滤,例如对某个特定列进行等值匹配。

   - 返回的结果是基于指定条件过滤后的查询对象。

# 示例:使用 filter_by 进行等值匹配

record = session.query(MyTable).filter_by(name='John').first()

2. **filter**:

   - `filter`方法则更加灵活,可以处理更复杂的条件,包括使用运算符、函数和组合条件。

   - 可以通过`and_`、`or_`和其他逻辑运算符结合多个条件进行查询。

   - 对于复杂的查询需求,通常更适合使用`filter`方法。

   - 返回的结果也是基于指定条件过滤后的查询对象。

# 示例:使用 filter 进行复杂条件查询

records = session.query(MyTable).filter(and_(MyTable.age >= 25, MyTable.age

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]