SQLModel 教程:使用 where 条件过滤查询结果
理解 SQLModel 的查询过滤机制
SQLModel 是一个基于 Python 类型提示的 ORM 工具,它结合了 SQLAlchemy 和 Pydantic 的优势。在实际应用中,我们经常需要根据特定条件筛选数据,这正是 where 子句发挥作用的地方。
示例代码解析
让我们逐步分析这个教程示例,了解如何使用 where 条件进行数据筛选。
1. 数据模型定义
首先定义了一个 Hero 模型,包含以下字段:
- id: 主键,自增
- name: 英雄名称
- secret_name: 秘密身份
- age: 年龄(可选)
class Hero(SQLModel, table=True):
id: Optional[int] = Field(default=None, primary_key=True)
name: str
secret_name: str
age: Optional[int] = None
2. 数据库连接配置
使用 SQLite 作为数据库后端,并启用 SQL 语句回显(echo=True),方便调试:
sqlite_file_name = "database.db"
sqlite_url = f"sqlite:///{sqlite_file_name}"
engine = create_engine(sqlite_url, echo=True)
3. 数据准备
创建了7个英雄实例并插入数据库:
hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador")
# ...其他英雄实例
4. 核心查询逻辑
重点在于 select_heroes()
函数,它演示了如何使用 where 条件:
def select_heroes():
with Session(engine) as session:
statement = select(Hero).where(Hero.age >= 35)
results = session.exec(statement)
for hero in results:
print(hero)
这段代码会筛选出年龄大于等于35岁的所有英雄。
深入理解 where 条件
SQLModel 的 where 方法提供了强大的查询过滤能力:
- 比较运算符:可以使用
>
,<
,>=
,<=
,==
,!=
等标准比较运算符 - 多条件组合:通过
and_()
和or_()
函数组合多个条件 - 空值检查:使用
is None
或is not None
检查空值 - 字符串操作:支持
like()
,ilike()
等字符串匹配操作
实际应用建议
- 性能考虑:复杂的 where 条件应该在数据库层面执行,而不是在Python中过滤
- 链式调用:where 条件可以链式调用,构建复杂的查询逻辑
- 类型安全:得益于Python类型提示,条件表达式中的字段名有自动补全和类型检查
- 调试技巧:设置
echo=True
可以查看生成的SQL语句,帮助调试查询条件
扩展思考
这个简单的示例展示了SQLModel查询过滤的基础用法。在实际项目中,你可能会遇到更复杂的场景:
- 多表联合查询的过滤条件
- 动态构建查询条件
- 使用子查询作为过滤条件
- 组合多个过滤条件的复杂逻辑
SQLModel 的查询API设计保持了SQLAlchemy的强大功能,同时又通过Python类型提示提供了更好的开发体验。掌握where条件的使用是构建高效数据查询的关键一步。
通过这个教程,你应该已经理解了如何在SQLModel中使用where条件进行数据筛选。接下来可以尝试更复杂的查询条件,探索SQLModel提供的其他查询功能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考