跳转到主要内容

SQLModel,Python中的SQL数据库,旨在实现简洁、兼容性和健壮性。

项目描述

SQLModel

SQLModel,Python中的SQL数据库,旨在实现简洁、兼容性和健壮性。

Test Publish Coverage Package version


文档: https://sqlmodel.cn

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


SQLModel是一个Python代码与SQL数据库交互的库,使用Python对象。它旨在实现直观、易于使用、高度兼容和健壮。

SQLModel 基于Python类型注解,并由 PydanticSQLAlchemy 支持。

主要特点包括

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

赞助商

FastAPI 中的 SQL 数据库

SQLModel 旨在简化与 FastAPI 应用程序中的 SQL 数据库交互,由同一 作者 创建。😁

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

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

要求

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-0.0.22.tar.gz (116.4 kB 查看哈希)

上传时间 源代码

构建发行版

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

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面