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