SQLModel - FastAPI 中处理 SQL 交互

在这里插入图片描述


一、关于 SQLModel

SQLModel 是一个用于从 Python 代码中与 SQL 数据库交互的库,使用 Python 对象。它旨在设计得直观、易于使用、高度兼容和健壮。
SQLModel 基于 Python 类型注解,由 PydanticSQLAlchemy 驱动。


关键特性

关键特性包括:

  • 易于编写: 优秀的编辑器支持。补全无处不在。减少调试时间。设计得易于使用和学习。减少阅读文档的时间。
  • 易于使用: 它具有合理的默认设置,并在底层做大量工作以简化您编写的代码。
  • 兼容性: 它被设计为与 FastAPI、Pydantic 和 SQLAlchemy 兼容。
  • 可扩展性: 您拥有 SQLAlchemy 和 Pydantic 下的全部功能。
  • 简洁: 最小化代码重复。单个类型注解做很多工作。无需在 SQLAlchemy 和 Pydantic 中重复模型。

SQL 数据库 和 FastAPI

在这里插入图片描述

SQLModel旨在简化 FastAPI应用程序 中与SQL数据库的交互,它是是相同的作者。😁

它结合了SQLAlchemy和Pydantic,并尝试尽可能简化您编写的代码,允许您将代码重复减少到最小,同时尽可能获得最佳开发人员体验

SQLModel实际上是PydanticSQLAlchemy之上的一个薄层,经过精心设计,可以与两者兼容。


SQLAlchemy 和 Pydantic

Hero 类 是一个 SQLModel 模型。
但与此同时,✨它也是一个 SQLAlchemy 模型✨。因此,您可以将其与其他 SQLAlchemy 模型结合使用,或者可以轻松地将使用 SQLAlchemy 的应用程序迁移到 SQLModel
同时,✨它也是一个 Pydantic 模型 ✨。您可以使用继承与它来定义所有您的 数据模型,同时避免代码重复。这使得它与 FastAPI 的使用变得非常简单。


二、安装

Requirements

近期支持的 Python版本
SQLModel 基于 PydanticSQLAlchemy,它需要它们。当您安装 SQLModel 时,它们将被自动安装。


确保您创建一个 虚拟环境,激活它,然后安装 SQLModel,例如使用以下命令:

$ pip install sqlmodel
---> 100%
Successfully installed sqlmodel

三、示例

要了解数据库、SQL以及所有其他相关信息,请参阅SQLModel 文档
以下是一个快速示例。✨


1、一个 SQL 表

想象一下,你有一个名为 hero 的 SQL 表,其中包含:

  • id
  • name
  • secret_name
  • age

你想要它包含以下数据:

idnamesecret_nameage
1DeadpondDive Wilsonnull
2Spider-BoyPedro Parqueadornull
3Rusty-ManTommy Sharp48

2、创建一个 SQLModel 模型

然后您可以创建一个 SQLModel 模型如下:

from typing import Optional

from sqlmodel import Field, SQLModel

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

那个 Hero 类是一个 SQLModel 模型,在 Python 代码中相当于一个 SQL 表。
并且每个类属性都与每个 表列 相等。


3、创建行

然后您可以将表的每一行创建为模型的 实例

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)

这种方式,您可以使用传统的 Python 代码,使用 实例 来表示 表格,并且通过这种方式与 SQL 数据库 进行通信。


4、编辑器支持

一切都是为了您获得最佳的开发者体验而设计,提供最佳的编辑器支持。
包括 自动补全



并且 行内错误



5、写入数据库

您可以通过快速阅读教程来了解更多关于SQLModel的信息,但如果您现在就需要体验如何将这些内容组合在一起并保存到数据库中,您可以这样做:

from typing import Optional

from sqlmodel import Field, Session, SQLModel, create_engine

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

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)

engine = create_engine("sqlite:///database.db")

SQLModel.metadata.create_all(engine)

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

那将保存一个 SQLite 数据库,包含 3 位英雄。


6、从数据库中选择

然后,您可以为相同的数据库编写查询,例如使用:

from typing import Optional

from sqlmodel import Field, Session, SQLModel, create_engine, select

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

engine = create_engine("sqlite:///database.db")

with Session(engine) as session:
    statement = select(Hero).where(Hero.name == "Spider-Boy")
    hero = session.exec(statement).first()
    print(hero)

7、在任何编辑器中都支持

SQLModel 被精心设计以提供最佳的开发者体验和编辑器支持,甚至在从数据库中选择数据后



2025-03-30(日)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程乐园

请我喝杯伯爵奶茶~!

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

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

打赏作者

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

抵扣说明:

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

余额充值