【进阶】SQLAlchemy查询构造器详解
发布时间: 2024-06-27 11:02:22 阅读量: 74 订阅数: 103
![【进阶】SQLAlchemy查询构造器详解](https://img-blog.csdnimg.cn/img_convert/94a6d264d6da5a4a63e6379f582f53d0.png)
# 2.1 比较操作符和逻辑操作符
### 2.1.1 等于、大于、小于等比较操作符
SQLAlchemy 提供了丰富的比较操作符,用于在查询中指定条件。这些操作符包括:
- `==`:等于
- `!=`:不等于
- `>`:大于
- `<`:小于
- `>=`:大于等于
- `<=`:小于等于
这些操作符可用于比较字段值与常量、变量或其他字段值。例如,以下查询查找所有年龄大于 30 的用户:
```python
from sqlalchemy import and_
session.query(User).filter(User.age > 30)
```
### 2.1.2 AND、OR、NOT等逻辑操作符
逻辑操作符用于组合多个条件,创建更复杂的查询。SQLAlchemy 支持以下逻辑操作符:
- `and_`:逻辑与
- `or_`:逻辑或
- `not_`:逻辑非
这些操作符可用于组合比较操作符或其他条件。例如,以下查询查找年龄大于 30 或性别为女性的用户:
```python
from sqlalchemy import and_
session.query(User).filter(and_(User.age > 30, User.gender == "female"))
```
# 2. SQLAlchemy查询构造器的过滤操作
### 2.1 比较操作符和逻辑操作符
#### 2.1.1 等于、大于、小于等比较操作符
比较操作符用于比较两个表达式的值,并返回一个布尔值。SQLAlchemy支持以下比较操作符:
| 操作符 | 描述 |
|---|---|
| `==` | 等于 |
| `!=` | 不等于 |
| `>` | 大于 |
| `<` | 小于 |
| `>=` | 大于或等于 |
| `<=` | 小于或等于 |
**代码块:**
```python
from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.orm import sessionmaker
engine = create_engine('sqlite:///database.sqlite')
Session = sessionmaker(bind=engine)
session = Session()
# 查询年龄大于 20 的用户
users = session.query(User).filter(User.age > 20)
```
**逻辑分析:**
`filter()`方法接受一个布尔表达式作为参数,该表达式指定了要过滤的行。在上面的示例中,布尔表达式`User.age > 20`指定了年龄大于 20 的用户。
#### 2.1.2 AND、OR、NOT等逻辑操作符
逻辑操作符用于组合布尔表达式,并创建更复杂的过滤条件。SQLAlchemy支持以下逻辑操作符:
| 操作符 | 描述 |
|---|---|
| `and_` | 逻辑与 |
| `or_` | 逻辑或 |
| `not_` | 逻辑非 |
**代码块:**
```python
# 查询年龄大于 20 且姓名以 "J" 开头的用户
users = session.query(User).filter(and_(User.age > 20, User.name.startswith('J')))
```
**逻辑分析:**
`and_()`方法将两个布尔表达式组合成一个逻辑与表达式。在上面的示例中,逻辑与表达式`and_(User.age > 20, User.name.startswith('J'))`指定了年龄大于 20 且姓名以 "J" 开头的用户。
### 2.2 模糊查询和范围查询
#### 2.2.1 LIKE、ILIKE等模糊查询操作符
模糊查询操作符用于查找与指定模式匹配的值。SQLAlchemy支持以下模糊查询操作符:
| 操作符 | 描述 |
|---|---|
| `like` | 类似于 |
| `ilike` | 不区分大小写的类似于 |
**代码块:**
```python
# 查询姓名包含 "John" 的用户
users = session.query(User).filter(User.name.like('%John%'))
```
**逻辑分析:**
`like()`方法将一个字符串与一个模式进行比较。在上面的示例中,模式`'%John%'`指定了包含 "John" 字符串的任何值。
#### 2.2.2 BETWEEN、IN等范围查询操作符
范围查询操作符用于查找介于指定范围内的值。SQLAlchemy支持以下范围查询操作符:
| 操作符 | 描述 |
|---|---|
| `between` | 介于 |
| `in` | 在 ... 之内 |
**代码块:**
```python
# 查询年龄在 20 到 30 之间(包含边界)的用户
users = session.query(User).filter(User.age.between(20, 30))
# 查询 ID 在 [1, 3, 5] 中的用户
users = session.query(User).filter(User.id.in_([1, 3, 5]))
```
**逻辑分析:**
`between()`方法将一个值与两个边界进行比较。在上面的示例中,边界`20`和`30`指定了年龄介于 20 到 30 之间(包含边界)的值。
`in_()`方法将一个值与一个值列表进行比较。在上面的示例中,值列表`[1, 3, 5]`指定了 ID 为
0
0