简介
sqlmodel 基于 Pydantic 和 SQLAlchemy,可以与二者结合使用
基于 Pydantic
基于 pydantic 可以获得自动数据验证 序列化和文档的作用,可以像 Pydantic 一样使用 SQLModel.您甚至可以创建不表示 SQL 表的 SQLModel 模型。在这种情况下,它们将与 Pydantic 模型相同。
这特别有用,因为现在您可以创建一个从另一个非 SQL 模型继承的 SQL 数据库模型。您可以使用它来减少代码重复。它还将使您的代码更一致,改进编辑器支持等等。
基于 SQLAlchemy
在底层,SQLModel 也给予 SQLAlchemy,并将其用于所有操作
再探数据库
数据库可以是一个名为 **.db
的文件,以非常高效的方式使用代码进行管理,比如 sqllite.
还有一种叫服务器数据库,是在一个服务器上作为应用程序运行的系统,在内部以优化的格式处理多个文件.这种情况下代码将直接与服务器程序通信,而不是直接读取或修改文件.数据库还可以位于不同的服务器上代码会与数据库应用程序进行通信,比如 Postgresql,MySql 或 MongoDB
在某些情况下,数据库可能是一组在不同机器上运行的应用程序,他们协作工作并在彼此之间互相通信,以提高效率并获取更多的数据.大多数作为服务器应用程序工作的数据库也以一种或另一种方式支持多个服务器。
ORM
比如一个简单的查询语句:
select * from hero;
这个 sql 语言有一个小小的缺陷,他不是用来与 python 等语言混合编程的,最简单的方法是把 sql 放在字符串中,并把字符串发送到服务器.但在这种情况下,你将没有编辑器支持、内联错误、自动完成等。因为对于编辑器来说,SQL 语句只是一串文本。如果出现错误,编辑器将无法提供帮助。😔
SQL 清理: 确保外部用户发送的任何内容在 sql 字符串中安全使用的过程叫做 sql 的清理,他在 sqlmodel 中默认提供.使用 sqlmodel,无需直接编写 sql 语句,而是使用 python 类与数据库交互
user_id = 2
session.exec(
select(Hero).where(Hero.id == user_id)
)
这样还能防止注入攻击,比如用户输入了 2;Drop Table Hero
.sqlmodel 会把他转换为`
SELECT * FROM hero WHERE id = "2; DROP TABLE hero;";
ORM 表示 对象关系映射。