SQLModel 教程:使用 select 查询数据

SQLModel 教程:使用 select 查询数据

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

SQLModel 是一个强大的 Python 库,它结合了 SQLAlchemy 和 Pydantic 的优点,为数据库操作提供了简单直观的接口。本文将重点介绍如何使用 SQLModel 的 select 功能来查询数据库中的数据。

数据模型定义

首先我们需要定义一个数据模型,这里我们创建了一个 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 语句,这对调试很有帮助。

创建数据库和表

def create_db_and_tables():
    SQLModel.metadata.create_all(engine)

这个方法会创建数据库文件(如果不存在)和所有定义的表。

插入测试数据

def create_heroes():
    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)

    with Session(engine) as session:
        session.add(hero_1)
        session.add(hero_2)
        session.add(hero_3)
        session.commit()

这里我们创建了三个英雄实例,并使用会话将它们添加到数据库中。

查询数据

核心的查询功能在 select_heroes 方法中:

def select_heroes():
    with Session(engine) as session:
        heroes = session.exec(select(Hero)).all()
        print(heroes)

select(Hero) 创建了一个查询,session.exec() 执行这个查询,.all() 获取所有结果。这会返回数据库中所有的 Hero 记录。

主程序流程

def main():
    create_db_and_tables()
    create_heroes()
    select_heroes()

程序的主要流程是:

  1. 创建数据库和表
  2. 插入测试数据
  3. 查询并打印所有英雄

进阶查询示例

虽然示例中只展示了最简单的查询,但 SQLModel 的 select 功能非常强大。你可以:

  1. 添加过滤条件:
select(Hero).where(Hero.age > 30)
  1. 只选择特定字段:
select(Hero.name, Hero.age)
  1. 排序结果:
select(Hero).order_by(Hero.age.desc())
  1. 限制返回数量:
select(Hero).limit(5)

总结

通过这个教程,我们学习了如何使用 SQLModel 进行基本的数据库操作,特别是如何使用 select 语句查询数据。SQLModel 的查询语法既保持了 Python 的优雅,又提供了强大的功能,是处理数据库操作的优秀选择。

在实际项目中,你可以根据需要构建更复杂的查询,SQLModel 都能很好地支持。记住总是使用会话上下文管理器 (with Session...) 来确保资源被正确释放。

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

打赏作者

石玥含Lane

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

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

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

打赏作者

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

抵扣说明:

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

余额充值