跳至主要内容

SQLModel,Python中的SQL数据库,设计用于简洁、兼容性和健壮性。

项目描述

SQLModel

SQLModel,Python中的SQL数据库,设计用于简洁、兼容性和健壮性。

Test Publish Coverage Package version


文档: https://sqlmodel.cn

源代码: https://github.com/fastapi/sqlmodel


SQLModel是一个库,用于从Python代码中通过Python对象与SQL数据库进行交互。它设计得直观、易于使用、高度兼容且健壮。

SQLModel 是基于 Python 类型注解的,由 PydanticSQLAlchemy 驱动。

其主要特点包括

  • 易于编写:强大的编辑器支持。到处都有自动完成。更少的时间用于调试。设计用于易于使用和学习。更少的时间阅读文档。
  • 易于使用:它具有合理的默认值,并在底层执行大量工作以简化您编写的代码。
  • 兼容性:它设计为与 FastAPI、Pydantic 和 SQLAlchemy 兼容。
  • 可扩展性:您拥有 SQLAlchemy 和 Pydantic 所有的功能。
  • 简洁性:最小化代码重复。单个类型注解完成大量工作。无需在 SQLAlchemy 和 Pydantic 中重复模型。

赞助商

FastAPI 中的 SQL 数据库

SQLModel 是为简化在 FastAPI 应用程序中与 SQL 数据库的交互而设计的,它是由同一个 作者 创建的。😁

它结合了 SQLAlchemy 和 Pydantic,并尽可能简化您编写的代码,使您可以将代码重复减少到最小,同时获得最佳的开发者体验。

SQLModel 实际上是在 PydanticSQLAlchemy 之上的一层薄薄的封装,精心设计以与两者兼容。

要求

一个最新且目前受支持的 Python 版本

由于 SQLModel 基于 PydanticSQLAlchemy,因此它需要它们。当您安装 SQLModel 时,它们将自动安装。

安装

请确保您创建了一个 虚拟环境,激活它,然后安装 SQLModel,例如

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

示例

有关数据库、SQL 以及其他所有内容的介绍,请参阅 SQLModel 文档

这里有一个快速示例。✨

一个 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

创建一个 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 表。

这些类属性中的每一个都相当于每个表的列。

创建行

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

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 数据库进行通信。

编辑器支持

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

包括 自动完成

内联错误

写入数据库

您可以通过快速跟随教程了解更多有关 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()

这将保存一个包含 3 个英雄的 SQLite 数据库。

从数据库中选择

然后您可以编写查询来从该数据库中选择,例如

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)

编辑器支持无处不在

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

SQLAlchemy 和 Pydantic

这个类 Hero 是一个 SQLModel 模型。

但同时,✨ 它也是一个 SQLAlchemy 模型 ✨。因此,您可以将其与其他 SQLAlchemy 模型结合使用,或者可以轻松地将使用 SQLAlchemy 的应用程序迁移到 SQLModel

并且同时,✨ 它也是一个 Pydantic 模型 ✨。您可以使用继承来定义所有数据模型,同时避免代码重复。这使得它与 FastAPI 一起使用非常容易。

许可协议

本项目采用 MIT 许可协议 许可。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

sqlmodel_slim-0.0.22.tar.gz (116.5 kB 查看哈希值)

上传时间 源代码

构建分发

sqlmodel_slim-0.0.22-py3-none-any.whl (28.3 kB 查看哈希值)

上传时间 Python 3

支持者

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误日志StatusPageStatusPage状态页面