技术矢量图由 freepik 创建 - www.freepik.com
你经常编写 SQL 吗?你是否经常从 Python 中调用这些 SQL?能够通过 Python 链接 SQL 数据库并定义、操作和查询它们的想法是否吸引你?
1. Google 网络安全证书 - 快速进入网络安全职业的快车道。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织的 IT 工作
SQLModel 是一个用于在纯 Python 中与 SQL 数据库交互的 Python 库。它的设计动机包括直观性、易用性、兼容性和健壮性。SQLModel 使用 Python 的 类型注解,由 Pydantic 强制和管理,以及 SQLAlchemy,即“Python SQL 工具包和对象关系映射器”,用于其 SQL 交互。
这个库是由 Sebastián Ramírez,即 FastAPI 的作者编写的,这两个库设计上无缝协作。
SQLModel 的关键特性,直接取自项目的 GitHub 仓库,包含:
- 编写直观:编辑器支持优秀。处处有自动完成。减少调试时间。设计上易于使用和学习。减少阅读文档的时间。
- 易于使用:它具有合理的默认值,并且在底层做了大量工作,以简化你编写的代码。
- 兼容:设计上与 FastAPI、Pydantic 和 SQLAlchemy 兼容。
- 可扩展:你拥有 SQLAlchemy 和 Pydantic 所提供的所有强大功能。
- 简短:最小化代码重复。一个类型注解可以完成大量工作。不需要在 SQLAlchemy 和 Pydantic 中重复模型。
让我们快速看看 SQLModel 是如何工作的。
想要使用 SQLModel 创建一个表格吗?
这是一个简单的 示例,来自库的 GitHub 仓库中的代码片段。
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 对象。SQLModel 对象等同于 SQLModel 库中的 SQL 表。类属性,如 id
和 name
,是表中的列。
想要在表中创建一行,也就是一个数据实例?
这是一个来自库的 GitHub 仓库的示例,演示了如何操作。请注意,每一行都是上面定义模型的一个实例。
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 代码作为 Python 对象和后端 SQL 数据库之间的中介。
请注意,目前尚未将任何表或数据写入现有数据库,可以按如下方式实现。以下完整代码示例基于上述代码。
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 个“英雄”条目。
当然,SQLModel 还可以做很多其他事情。有关库可以实现的所有内容及其实现方法,请查看完整文档。
马修·梅奥 (@mattmayo13) 是数据科学家以及 KDnuggets 的主编,这是一个开创性的在线数据科学和机器学习资源。他的兴趣包括自然语言处理、算法设计与优化、无监督学习、神经网络以及机器学习的自动化方法。马修拥有计算机科学硕士学位和数据挖掘研究生文凭。他可以通过 editor1 at kdnuggets[dot]com 联系到。