SQLModel 教程:使用 OR 条件进行复杂查询

SQLModel 教程:使用 OR 条件进行复杂查询

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

前言

在数据库操作中,我们经常需要根据多个条件来筛选数据。SQLModel 作为 Python 的 ORM 工具,提供了强大的查询功能。本教程将重点介绍如何使用 or_ 操作符构建复杂的 OR 条件查询。

项目准备

首先,我们定义一个简单的 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 语句,方便调试。

创建测试数据

我们创建了 7 个英雄实例,年龄分布各不相同:

hero_1 = Hero(name="Deadpond", secret_name="Dive Wilson")  # 无年龄
hero_2 = Hero(name="Spider-Boy", secret_name="Pedro Parqueador")  # 无年龄
hero_3 = Hero(name="Rusty-Man", secret_name="Tommy Sharp", age=48)
hero_4 = Hero(name="Tarantula", secret_name="Natalia Roman-on", age=32)
hero_5 = Hero(name="Black Lion", secret_name="Trevor Challa", age=35)
hero_6 = Hero(name="Dr. Weird", secret_name="Steve Weird", age=36)
hero_7 = Hero(name="Captain North America", secret_name="Esteban Rogelios", age=93)

OR 条件查询

核心部分是我们如何使用 or_ 操作符构建查询:

statement = select(Hero).where(or_(Hero.age <= 35, Hero.age > 90))

这行代码的意思是:选择所有年龄小于等于 35 岁 或者 大于 90 岁的英雄。

查询逻辑解析

  1. select(Hero) - 从 Hero 表中选择数据
  2. .where(...) - 添加筛选条件
  3. or_(条件1, 条件2) - 表示满足条件1 条件2

预期结果

根据我们的测试数据:

  • 年龄 ≤ 35:Tarantula(32), Black Lion(35)
  • 年龄 > 90:Captain North America(93)
  • 无年龄记录:不会被包含在结果中

因此查询结果应该包含 Tarantula、Black Lion 和 Captain North America 三位英雄。

实际应用场景

OR 条件在实际开发中非常常见,例如:

  • 筛选特定状态(如"已发货"或"已完成"的订单)
  • 查找特定年龄段的用户
  • 多条件搜索功能

进阶思考

  1. 可以组合多个 or_and_ 操作符构建更复杂的查询
  2. 对于 NULL 值处理要特别注意,上面的查询不会包含没有年龄记录的英雄
  3. 性能考虑:复杂的 OR 条件可能会影响查询性能,需要合理使用索引

总结

通过本教程,我们学习了:

  1. 如何使用 SQLModel 定义模型类
  2. 如何初始化数据库连接
  3. 如何使用 or_ 操作符构建 OR 条件查询
  4. 理解了 OR 条件查询的实际应用场景

掌握这些基础查询技巧是使用 SQLModel 进行高效数据库操作的重要一步。

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

打赏作者

宁烈廷

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

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

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

打赏作者

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

抵扣说明:

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

余额充值