文章目录
一、关于 SQLModel
SQLModel 是一个用于从 Python 代码中与 SQL 数据库交互的库,使用 Python 对象。它旨在设计得直观、易于使用、高度兼容和健壮。
SQLModel 基于 Python 类型注解,由 Pydantic 和 SQLAlchemy 驱动。
- github : https://github.com/fastapi/sqlmodel
- 官方文档: https://sqlmodel.tiangolo.com
- Liscense : MIT
关键特性
关键特性包括:
- 易于编写: 优秀的编辑器支持。补全无处不在。减少调试时间。设计得易于使用和学习。减少阅读文档的时间。
- 易于使用: 它具有合理的默认设置,并在底层做大量工作以简化您编写的代码。
- 兼容性: 它被设计为与 FastAPI、Pydantic 和 SQLAlchemy 兼容。
- 可扩展性: 您拥有 SQLAlchemy 和 Pydantic 下的全部功能。
- 简洁: 最小化代码重复。单个类型注解做很多工作。无需在 SQLAlchemy 和 Pydantic 中重复模型。
SQL 数据库 和 FastAPI
SQLModel旨在简化 FastAPI应用程序 中与SQL数据库的交互,它是是相同的作者。😁
它结合了SQLAlchemy和Pydantic,并尝试尽可能简化您编写的代码,允许您将代码重复减少到最小,同时尽可能获得最佳开发人员体验。
SQLModel实际上是Pydantic和SQLAlchemy之上的一个薄层,经过精心设计,可以与两者兼容。
SQLAlchemy 和 Pydantic
Hero
类 是一个 SQLModel 模型。
但与此同时,✨它也是一个 SQLAlchemy 模型✨。因此,您可以将其与其他 SQLAlchemy 模型结合使用,或者可以轻松地将使用 SQLAlchemy 的应用程序迁移到 SQLModel。
同时,✨它也是一个 Pydantic 模型 ✨。您可以使用继承与它来定义所有您的 数据模型,同时避免代码重复。这使得它与 FastAPI 的使用变得非常简单。
二、安装
Requirements
近期支持的 Python版本。
如 SQLModel 基于 Pydantic 和 SQLAlchemy,它需要它们。当您安装 SQLModel 时,它们将被自动安装。
确保您创建一个 虚拟环境,激活它,然后安装 SQLModel,例如使用以下命令:
$ pip install sqlmodel
---> 100%
Successfully installed sqlmodel
三、示例
要了解数据库、SQL以及所有其他相关信息,请参阅SQLModel 文档。
以下是一个快速示例。✨
1、一个 SQL 表
想象一下,你有一个名为 hero
的 SQL 表,其中包含:
id
name
secret_name
age
你想要它包含以下数据:
id | name | secret_name | age |
---|---|---|---|
1 | Deadpond | Dive Wilson | null |
2 | Spider-Boy | Pedro Parqueador | null |
3 | Rusty-Man | Tommy Sharp | 48 |
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(日)