SQLModel 教程:使用 WHERE 条件过滤查询结果

SQLModel 教程:使用 WHERE 条件过滤查询结果

sqlmodel SQL databases in Python, designed for simplicity, compatibility, and robustness. sqlmodel 项目地址: https://gitcode.com/gh_mirrors/sq/sqlmodel

理解 SQLModel 中的 WHERE 条件查询

在数据库操作中,WHERE 子句是最常用的查询条件之一。SQLModel 作为 Python 的 ORM 工具,提供了简洁而强大的方式来构建带条件的查询语句。本教程将详细介绍如何使用 SQLModel 的 where() 方法进行数据过滤。

基础模型定义

首先,我们定义了一个 Hero 模型,包含以下字段:

class Hero(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str
    secret_name: str
    age: Optional[int] = None

这个模型表示一个英雄角色,包含 ID、名称、秘密身份和年龄等属性。注意 age 字段是可选的,因为不是所有英雄都需要公开年龄信息。

数据库初始化

我们使用 SQLite 作为数据库后端:

sqlite_file_name = "database.db"
sqlite_url = f"sqlite:///{sqlite_file_name}"
engine = create_engine(sqlite_url, echo=True)

echo=True 参数会输出执行的 SQL 语句,这对调试很有帮助。

创建示例数据

create_heroes() 函数中,我们创建了 7 个英雄实例并存入数据库:

hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador")
# ...其他英雄实例

这些数据将用于演示 WHERE 条件查询。

WHERE 条件查询的核心用法

select_heroes() 函数展示了如何使用 where() 方法进行条件过滤:

statement = select(Hero).where(Hero.age > 35)

这行代码构建了一个查询,它会返回所有年龄大于 35 岁的英雄。SQLModel 会将这个 Python 表达式转换为适当的 SQL WHERE 子句。

查询结果处理

执行查询后,我们可以遍历结果:

results = session.exec(statement)
for hero in results:
    print(hero)

这会打印出所有符合条件的英雄对象。

WHERE 条件的更多可能性

虽然示例中只展示了简单的数值比较,但 SQLModel 的 where() 方法支持更多复杂条件:

  1. 等于比较:Hero.name == "Spider-Boy"
  2. 不等于:Hero.age != 35
  3. 包含检查:Hero.name.in_(["Spider-Boy", "Deadpond"])
  4. 字符串匹配:Hero.name.like("%Boy%")
  5. 多条件组合:where((Hero.age > 30) & (Hero.age < 50))

实际应用场景

WHERE 条件查询在实际开发中非常有用,例如:

  • 用户管理系统中查询特定年龄段的用户
  • 电商平台中筛选价格区间的商品
  • 内容管理系统中查找特定状态的文章

最佳实践

  1. 对于频繁使用的查询条件,可以考虑封装为模型的方法
  2. 复杂的查询可以拆分为多个简单条件组合
  3. 使用参数化查询而非字符串拼接来防止 SQL 注入
  4. 对常用查询条件考虑添加数据库索引

总结

本教程展示了 SQLModel 中 WHERE 条件查询的基本用法。通过 where() 方法,我们可以构建各种复杂的查询条件,从数据库中精确获取我们需要的数据。SQLModel 的 API 设计保持了 Python 的简洁风格,同时提供了强大的数据库操作能力。

sqlmodel SQL databases in Python, designed for simplicity, compatibility, and robustness. sqlmodel 项目地址: https://gitcode.com/gh_mirrors/sq/sqlmodel

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒋闯中Errol

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值