1. 简介

SQLModel 建立在 SQLAlchemy 之上,提供了简化的连接管理和事务处理,同时直接支持 MySQL 数据类型和简化了外键和关系的定义,非常适合轻量级应用程序和小型项目。它可以使用 Pydantic 来定义模型,并且可以自动将这些模型映射到数据库表。这使得开发者可以轻松地进行数据库操作,而无需编写大量的 SQL 代码。

2. 安装

首先,需要安装 FastAPI 和 SQLModel:

1
2
pip install fastapi[all]
pip install sqlmodel

3. 定义模型

使用 SQLModel 定义模型非常简单。你只需要从 SQLModel 继承并添加字段即可。

1
2
3
4
5
6
from sqlmodel import SQLModel, Field

class User(SQLModel, table=True):
id: int = Field(default=None, primary_key=True)
name: str
age: int

4. SQLModel的独特之处

  • 基于Pydantic,继承了 Pydantic 的类型注解和数据验证功能
  • 使用类型注解来定义数据库模型,从而简化了模型的创建过程
  • 支持异步操作
  • 操作简化,会话、事务处理等做了进一步简化
  • 为FastAPI设计

5. SQLModel的简单实用

SQLModel 支持多种数据库,例如 SQLite、PostgreSQL 等。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from sqlmodel import Field, Session, SQLModel, create_engine, select

engine = create_engine("sqlite:///database.db")
SQLModel.metadata.create_all(engine)

# 创建数据
new_user = User(name="John Doe", age=30)
with Session(engine) as session:
session.add(new_user)
session.commit()

# select 查询
with Session(engine) as session:
statement = select(User).where(User.name == "John Doe")
user = session.exec(statement).first()
print(user)

# select all
with Session(engine) as session:
statement = select(User)
users = session.exec(statement).all()
print(users)

# 更新数据
with Session(engine) as session:
statement = select(User).where(User.name == "John Doe")
user_to_update = session.exec(statement).first()
user_to_update.name = "Jane"
session.commit()

# 删除数据
with Session(engine) as session:
statement = select(User).where(User.name == "Jane")
user_to_delete = session.exec(statement).first()
session.delete(user_to_delete)
session.commit()