特性¶
专为 FastAPI 设计¶
SQLModel 由 FastAPI 的同一位作者创建。
它遵循相同的设计理念,旨在成为在 FastAPI 应用程序中与 SQL 数据库交互最直观的方式。
尽管如此,SQLModel 完全
纯粹的现代 Python¶
它完全基于标准现代 Python 类型注解。无需学习新语法。只是标准的现代 Python。
如果您需要一个关于如何使用 Python 类型(即使您不使用 SQLModel 或 FastAPI)的 2 分钟复习,请查看 FastAPI 教程部分:Python 类型介绍。
您还将在教程 - 用户指南:第一步部分看到 20 秒的复习。
编辑器支持¶
SQLModel 旨在易于使用和直观,以确保最佳的开发体验,随处都有自动补全。
这是您的编辑器可能如何帮助您的:

- 在PyCharm中

您将在编写最少量代码的同时获得所有内容的补全。
您无需猜测模型中不同属性的类型,它们是否可能是 None 等。您的编辑器将能够帮助您完成所有工作,因为 SQLModel 基于 标准 Python 类型注解。
SQLModel 采用PEP 681 进行 Python 类型注解,以确保最佳开发体验,因此即使在创建新的模型实例时,您也会获得内联错误和自动补全。

简洁¶
SQLModel 对所有内容都有合理的默认值,并且随处都有可选配置。
但默认情况下,它都“即开即用”。
您可以从最简单(也是最直观)的数据类型注解开始。
之后,您可以使用 SQLAlchemy 和 Pydantic 的所有强大功能来微调一切。
基于 Pydantic¶
SQLModel 基于 Pydantic,并保持相同的设计、语法和理念。
实际上,✨ 一个 SQLModel 模型也是一个 Pydantic 模型。✨
为了实现这一点,进行了大量的研究和努力。
这意味着您将获得 Pydantic 的所有功能,包括自动数据验证、序列化和文档。您可以像使用 Pydantic 一样使用 SQLModel。
您甚至可以创建不代表 SQL 表的 SQLModel 模型。在这种情况下,它们将与 Pydantic 模型相同。
这特别有用,因为现在您可以创建一个继承自另一个非 SQL 模型的 SQL 数据库模型。您可以使用它来大量减少代码重复。它还将使您的代码更加一致,改进编辑器支持等。
这使其成为在 FastAPI 应用程序中处理 SQL 数据库的完美组合。🚀
您将在教程后面了解更多关于组合不同模型的信息。
基于 SQLAlchemy¶
SQLModel 也基于 SQLAlchemy,并将其用于所有方面。
实际上,✨ 一个 SQLModel 模型也是一个 SQLAlchemy 模型。✨
为了实现这一点,进行了大量研究和努力。特别是,在使单个模型同时成为 SQLAlchemy 模型和 Pydantic 模型方面,进行了大量的努力和实验。
这意味着您将获得 SQLAlchemy 的所有强大功能、鲁棒性和确定性,它是Python 中使用最广泛的数据库库。
SQLModel 提供自己的实用程序来改善开发体验,但实际上,它使用所有 SQLAlchemy 功能。
您甚至可以组合 SQLModel 模型和 SQLAlchemy 模型。
SQLModel 旨在满足最常见的用例,并尽可能简单方便地处理这些情况,提供最佳的开发体验。
但是当您遇到需要更复杂功能的更奇特的用例时,您仍然可以直接将 SQLAlchemy 插入 SQLModel 并在您的代码中使用其所有功能。
经过测试¶
- 100% 测试覆盖率(目前为 97%,在未来几天/几周内将达到 100%)。
- 100% 类型注解代码库。
