SQLModel 教程:使用 Python ORM 更新数据库记录

SQLModel 教程:使用 Python ORM 更新数据库记录

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

前言

SQLModel 是一个强大的 Python ORM(对象关系映射)工具,它结合了 SQLAlchemy 和 Pydantic 的优点,为开发者提供了简洁高效的数据模型定义和数据库操作方式。本文将重点讲解如何使用 SQLModel 更新数据库中的记录。

数据模型定义

首先我们需要定义一个数据模型类 Hero,它继承自 SQLModel 并设置了 table=True 参数,表示这个类对应数据库中的一个表:

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

这个模型定义了:

  • 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_db_and_tables() 函数会创建数据库和所有定义的表:

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

插入初始数据

create_heroes() 函数创建了多个英雄实例并插入数据库:

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

使用会话(Session)批量添加并提交:

with Session(engine) as session:
    session.add(hero_1)
    # ...添加其他英雄
    session.commit()

更新记录详解

核心的更新操作在 update_heroes() 函数中实现,我们一步步分析:

  1. 查询记录:使用 select() 查询名为 "Spider-Boy" 的英雄

    statement = select(Hero).where(Hero.name == "Spider-Boy")
    
  2. 执行查询:通过会话执行查询语句

    results = session.exec(statement)
    
  3. 获取单个结果:使用 one() 方法确保只返回一条记录

    hero = results.one()
    
  4. 修改属性:直接修改对象的属性

    hero.age = 16
    
  5. 标记为待更新:将修改后的对象添加到会话

    session.add(hero)
    
  6. 提交更改:将更改持久化到数据库

    session.commit()
    
  7. 刷新对象:从数据库重新加载对象的最新状态

    session.refresh(hero)
    

最佳实践

  1. 事务管理:使用 with 语句管理会话,确保资源正确释放
  2. 错误处理:实际应用中应添加异常处理,特别是 one() 方法可能抛出异常
  3. 批量更新:对于大量更新,考虑使用批量操作提高性能
  4. 验证数据:可以在模型类中添加 Pydantic 验证器确保数据有效性

总结

通过这个示例,我们学习了 SQLModel 中更新数据库记录的标准流程:

  1. 查询要更新的记录
  2. 修改对象属性
  3. 添加到会话
  4. 提交更改
  5. 刷新对象状态

SQLModel 的这种设计既保持了 Python 的简洁性,又提供了强大的数据库操作能力,是 Python ORM 的一个优秀选择。

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

打赏作者

宣海椒Queenly

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

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

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

打赏作者

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

抵扣说明:

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

余额充值