1.基础条件查询
1 2 3 4 5 6
| from sqlmodel import select
statement = select(Hero).where(Hero.name == "Spider-Boy")
age_filter = select(Hero).where(Hero.age > 30)
|
where() 方法支持所有SQL比较运算符(==, >, <, >=, <=, !=)
- 支持链式调用多个条件
- 自动转换Python类型为数据库类型
2.组合查询条件
1 2 3 4 5 6 7 8 9 10 11
| from sqlmodel import and_, or_
combined_and = select(Hero).where( and_(Hero.age >= 18, Hero.age <= 50) )
combined_or = select(Hero).where( or_(Hero.name == "Deadpond", Hero.secret_name.contains("Wilson")) )
|
特性说明:
and_() 实现逻辑与操作
or_() 实现逻辑或操作
- 支持嵌套组合复杂条件
3.空值处理
1 2 3 4 5
| null_query = select(Hero).where(Hero.age == None)
not_null_query = select(Hero).where(Hero.age != None)
|
None 自动转换为SQL的NULL
- 支持
is_not(None)替代!= None更直观
4.范围查询
1 2 3 4 5 6 7 8 9 10 11
| from sqlmodel import between
age_range = select(Hero).where( between(Hero.age, 20, 40) )
team_filter = select(Hero).where( Hero.team_id.in_([1, 3, 5]) )
|
特殊操作符:
between() 生成BETWEEN语句
in_() 实现集合匹配查询
- 支持列表参数自动展开
5.字符串操作
1 2 3 4 5 6 7 8 9
| name_like = select(Hero).where( Hero.name.like("%Spider%") )
exact_match = select(Hero).where( Hero.secret_name.ilike("dive wilson") )
|
字符串处理:
like() 实现SQL LIKE模式匹配
ilike() 实现大小写不敏感匹配
- 支持通配符
%和_
6.关联查询条件
1 2 3 4 5 6 7 8 9 10 11 12
| team_query = select(Hero).join(Team).where( Team.name == "Avengers" )
complex_filter = select(Hero).join(Team).where( and_( Hero.age > 25, Team.create_year >= 2020 ) )
|
关联查询要点:
- 使用
join()明确表关联关系
- 支持跨表字段作为过滤条件
- 自动处理外键关系
7.执行流程
graph LR
A[构建SELECT语句] --> B[添加WHERE条件]
B --> C[执行查询]
C --> D[转换结果为模型对象]
- 条件语句延迟执行机制
- 自动映射查询结果到模型实例
- 支持分页(limit/offset)
提示:完整示例代码建议参考官方文档,复杂查询推荐结合SQLAlchemy的查询构建器实现更灵活的条件组合