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 是一个基于 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 方法提供了强大的查询过滤能力:

  1. 比较运算符:可以使用 >, <, >=, <=, ==, != 等标准比较运算符
  2. 多条件组合:通过 and_()or_() 函数组合多个条件
  3. 空值检查:使用 is Noneis not None 检查空值
  4. 字符串操作:支持 like(), ilike() 等字符串匹配操作

实际应用建议

  1. 性能考虑:复杂的 where 条件应该在数据库层面执行,而不是在Python中过滤
  2. 链式调用:where 条件可以链式调用,构建复杂的查询逻辑
  3. 类型安全:得益于Python类型提示,条件表达式中的字段名有自动补全和类型检查
  4. 调试技巧:设置 echo=True 可以查看生成的SQL语句,帮助调试查询条件

扩展思考

这个简单的示例展示了SQLModel查询过滤的基础用法。在实际项目中,你可能会遇到更复杂的场景:

  • 多表联合查询的过滤条件
  • 动态构建查询条件
  • 使用子查询作为过滤条件
  • 组合多个过滤条件的复杂逻辑

SQLModel 的查询API设计保持了SQLAlchemy的强大功能,同时又通过Python类型提示提供了更好的开发体验。掌握where条件的使用是构建高效数据查询的关键一步。

通过这个教程,你应该已经理解了如何在SQLModel中使用where条件进行数据筛选。接下来可以尝试更复杂的查询条件,探索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
发出的红包

打赏作者

倪俪珍Phineas

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

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

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

打赏作者

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

抵扣说明:

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

余额充值