SQLModel 教程:使用 where 条件筛选数据

SQLModel 教程:使用 where 条件筛选数据

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

理解 SQLModel 的条件查询

SQLModel 是一个结合了 SQLAlchemy 和 Pydantic 优势的 Python ORM 框架,它提供了简洁直观的方式来操作数据库。本教程将重点介绍如何使用 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: 主键,自动生成
  • name: 英雄名称,必填
  • secret_name: 秘密身份,必填
  • 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 个英雄记录,包括他们的名称、秘密身份和年龄(部分英雄没有年龄信息)。

条件查询核心代码

重点在于 select_heroes() 函数中的条件查询:

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

这行代码做了以下几件事:

  1. select(Hero) 表示我们要查询 Hero 表
  2. 第一个 where 条件筛选年龄大于等于 35 岁的英雄
  3. 第二个 where 条件进一步筛选年龄小于 40 岁的英雄

多个 where 条件会以 AND 逻辑连接,相当于 SQL 中的:

SELECT * FROM hero WHERE age >= 35 AND age < 40

执行查询与结果处理

查询执行后,我们遍历结果并打印:

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

实际应用场景

这种条件查询在实际开发中非常常见,例如:

  • 筛选特定年龄段的用户
  • 查询某个价格区间的商品
  • 获取特定状态下的订单

条件查询的更多可能性

除了基本的比较运算符(>=, <),SQLModel 还支持:

  • 等于:Hero.name == "Deadpond"
  • 不等于:Hero.name != "Deadpond"
  • 包含:Hero.name.in_(["Deadpond", "Spider-Boy"])
  • 模糊匹配:Hero.name.like("%Boy%")
  • 空值检查:Hero.age.is_(None)

最佳实践建议

  1. 对于复杂的查询条件,可以拆分到多个 where 子句提高可读性
  2. 频繁使用的查询条件可以考虑封装为函数
  3. 注意处理可能为 None 的字段,避免运行时错误
  4. 在生产环境中,考虑添加适当的索引以提高查询性能

通过本教程,你应该已经掌握了 SQLModel 中使用 where 条件进行数据筛选的基本方法。这种链式调用的方式既保持了代码的简洁性,又提供了强大的查询能力。

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
发出的红包

打赏作者

邓娉靓Melinda

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

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

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

打赏作者

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

抵扣说明:

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

余额充值