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 进行数据库表的创建和数据插入操作。

环境准备

在开始之前,确保你已经安装了 SQLModel 和必要的依赖。本文示例将使用 SQLite 数据库作为演示,但 SQLModel 同样支持 PostgreSQL、MySQL 等其他数据库。

定义数据模型

在 SQLModel 中,我们首先需要定义数据模型。数据模型既是数据库表的映射,也是数据验证的 schema。

from typing import Optional
from sqlmodel import Field, Session, SQLModel, create_engine

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

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)
    team_id: Optional[int] = Field(default=None, foreign_key="team.id")

模型解析

  1. table=True 表示这个类不仅是一个 Pydantic 模型,还是一个数据库表
  2. Field 用于定义字段属性,如主键、索引等
  3. foreign_key 定义了外键关系,这里表示 Hero 属于某个 Team

数据库连接配置

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)

这个方法会创建所有定义的表结构。SQLModel 会自动处理表之间的关系。

插入数据

数据插入是数据库操作的基础,SQLModel 提供了简单直观的方式:

def create_heroes():
    with Session(engine) as session:
        # 创建团队记录
        team_preventers = Team(name="Preventers", headquarters="Sharp Tower")
        team_z_force = Team(name="Z-Force", headquarters="Sister Margaret's Bar")
        session.add(team_preventers)
        session.add(team_z_force)
        session.commit()

        # 创建英雄记录
        hero_deadpond = Hero(
            name="Deadpond", secret_name="Dive Wilson", team_id=team_z_force.id
        )
        hero_rusty_man = Hero(
            name="Rusty-Man",
            secret_name="Tommy Sharp",
            age=48,
            team_id=team_preventers.id,
        )
        hero_spider_boy = Hero(name="Spider-Boy", secret_name="Pedro Parqueador")
        
        session.add(hero_deadpond)
        session.add(hero_rusty_man)
        session.add(hero_spider_boy)
        session.commit()

        # 刷新对象以获取数据库生成的值
        session.refresh(hero_deadpond)
        session.refresh(hero_rusty_man)
        session.refresh(hero_spider_boy)

        print("Created hero:", hero_deadpond)
        print("Created hero:", hero_rusty_man)
        print("Created hero:", hero_spider_boy)

关键点说明

  1. 使用 Session 上下文管理器管理数据库会话
  2. session.add() 将对象添加到会话中
  3. session.commit() 提交事务,将更改持久化到数据库
  4. session.refresh() 从数据库重新加载对象,获取自动生成的 ID 等字段

主程序入口

def main():
    create_db_and_tables()
    create_heroes()

if __name__ == "__main__":
    main()

最佳实践

  1. 总是使用上下文管理器 (with Session...) 来管理会话
  2. 复杂的插入操作应该放在事务中
  3. 对于批量插入,考虑使用 session.bulk_save_objects() 提高性能
  4. 在生产环境中,应该添加适当的错误处理和日志记录

总结

通过本文,我们学习了如何使用 SQLModel 定义数据模型、创建数据库表以及插入数据。SQLModel 的类型提示和简洁 API 使得数据库操作更加安全和直观。下一步可以探索更复杂的查询、更新和删除操作,以及关系的高级用法。

希望这篇教程能帮助你快速上手 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
发出的红包

打赏作者

谢月连Jed

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

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

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

打赏作者

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

抵扣说明:

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

余额充值