1. SQLAlchemy 是什么?
SQLAlchemy 是 Python 最流行的数据库 ORM 框架之一。
它提供两种使用方式:
- Core
- 更接近原生 SQL
- 手写 SQL 表达式
- ORM(Object Relational Mapping)
- 用 Python 类表示数据库表
- 用对象操作数据
日常 Web 开发(FastAPI 等)通常使用 ORM。
核心关系:
1 | 数据库 |
2. 安装
1 | pip install sqlalchemy |
SQLite 不需要额外安装驱动。
3. SQLAlchemy 三个核心概念
3.1 Base:ORM 模型基类
Base 是所有数据表模型的父类。
例如:
数据库表:
1 | users |
Python 中:
1 | class User(Base): |
继承 Base 后,SQLAlchemy 才知道:
这个类需要映射成数据库表。
创建 Base:
1 | from sqlalchemy.orm import DeclarativeBase |
以后所有模型:
1 | class User(Base): |
都继承它。
3.2 Engine:数据库连接入口
Engine 负责:
- 连接数据库
- 管理数据库连接池
- 执行 SQL
创建:
1 | from sqlalchemy import create_engine |
解释:
1 | sqlite:///database.db |
表示:
当前目录创建:
1 | database.db |
echo:
1 | echo=True |
表示打印 SQL:
例如:
1 | SELECT * FROM users; |
方便调试。
3.3 Session:数据库操作会话
Session 是 ORM 操作数据库的核心。
它负责:
- 查询
- 新增
- 修改
- 删除
- 事务管理
例如:
1 | from sqlalchemy.orm import Session |
流程:
1 | 创建Session |
Session 类似一个数据库工作单元。
4. 创建数据表
定义模型
1 | from sqlalchemy import String, Integer |
解释:
tablename
对应数据库表名:
1 | __tablename__ = "users" |
数据库:
1 | users表 |
mapped_column
表示字段。
例如:
1 | id: Mapped[int] = mapped_column( |
对应:
1 | id INTEGER PRIMARY KEY |
5. 创建表
1 | Base.metadata.create_all(engine) |
作用:
读取所有继承 Base 的模型:
1 | User |
然后创建数据库表。
例如:
1 | database.db |
6. Session 工厂(项目常用)
实际项目一般不会:
1 | Session(engine) |
而是:
1 | from sqlalchemy.orm import sessionmaker |
以后:
1 | with SessionLocal() as session: # 这一步,机器才吐出一个全新的 session |
为什么?
因为:
1 | 一个请求 |
7. CRUD 操作
C - Create 创建
新增数据:
1 | with Session(engine) as session: |
流程:
1 | 创建对象 |
批量新增:
1 | users = [ |
R - Read 查询
SQLAlchemy 2.x 推荐:
1 | select() |
导入:
1 | from sqlalchemy import select |
查询全部
1 | with Session(engine) as session: |
对应 SQL:
1 | SELECT * |
根据 id 查询
1 | user = session.get( |
对应:
1 | SELECT * |
条件查询
年龄大于18:
1 | stmt = select(User).where( |
SQL:
1 | SELECT * |
多条件查询
1 | stmt = select(User).where( |
等价:
1 | WHERE age>18 |
U - Update 修改
ORM方式修改
先查询对象:
1 | user = session.get( |
SQLAlchemy 自动生成:
1 | UPDATE users |
批量更新
1 | from sqlalchemy import update |
D - Delete 删除
删除对象
1 | user = session.get( |
SQL:
1 | DELETE FROM users |
批量删除
1 | from sqlalchemy import delete |
8. 事务
Session 默认使用事务。
例如:
1 | try: |
成功:
1 | commit |
失败:
1 | rollback |
9. 完整运行示例
1 | from sqlalchemy import create_engine, select |
10. 最重要的心智模型
记住这张图:
1 | 数据库 |
角色:
| 组件 | 作用 |
|---|---|
| Base | 定义 ORM 模型的父类 |
| Model | Python类,对应数据库表 |
| Engine | 连接数据库 |
| Session | 操作数据库、管理事务 |
| session.add | 新增 |
| select | 查询 |
| commit | 提交修改 |
一句话:
Base 定义表结构,Engine 连接数据库,Session 操作数据,Model 代表表,commit 保存变化。
掌握这几个概念,就已经能写大部分 SQLAlchemy 项目了。