Tortoise-ORM 快速入门:像写 django 一样写异步数据库操作
📂 所属阶段:第三阶段 — 数据持久化(数据库篇)
🔗 相关章节:SQLAlchemy 2.0 实战 · Redis 集成 · FastAPI 路由
1. 为什么选 Tortoise-ORM?和 SQLAlchemy 说再见
如果把 SQLAlchemy 比作一把功能完备的瑞士军刀,那么 Tortoise-ORM 就是为 Python 异步开发量身打造的折叠剪刀——轻巧、直观、开箱即用。对于中小型项目和快速原型,它几乎可以零学习成本地让你从 django ORM 无缝过渡到异步世界。
1.1 一分钟对比 SQLAlchemy 2.0
简单说:如果你喜欢 django ORM 的表达方式,又需要原生异步支持,Tortoise-ORM 就是最好的答案。
1.2 一行命令搞定开发环境
根据你使用的数据库选择依赖,不要全部安装:
2. 初始化:两个文件让项目跑起来
Tortoise-ORM 的初始化非常清爽:分离配置与启动逻辑,整个流程只需要两个文件。
2.1 配置文件 tortoise_config.py
将连接信息、模型路径、时区等集中管理,后续只需导入一个字典即可:
2.2 在 FastAPI 中一键挂载
FastAPI 社区提供了 register_tortoise 工具,自动处理数据库连接的启动、关闭以及建表操作:
提示:生产环境中应使用迁移工具 Aerich 来管理表结构变更,而不是依赖
generate_schemas=True。
3. 模型定义:熟悉的 django ORM 配方
新建 demo_models.py,定义一套经典的博客模型:作者、标签、文章,涵盖外键、多对多、自动时间戳等常用字段。
定义完成后,Tortoise-ORM 会根据模型自动生成对应的数据库表,外键和多对多关系也会一并建立,完全不需要手写 SQL。
4. CRUD 实战:记住一个 await 就够了
所有数据库操作都必须在异步函数中执行,并在调用前加上 await。下面的例子使用纯 Tortoise-ORM 接口,不依赖任何 Web 框架,方便你在任意地方复用。
4.1 创建(Create)
4.2 读取(Read)
关键原则:如果要访问外键或多对多关联字段,务必使用 prefetch_related() 提前加载数据,否则容易引发 N+1 查询问题。
4.3 更新(Update)
4.4 删除(Delete)
5. 集成 FastAPI:5 分钟写完整 REST 接口
将 Pydantic 模型与前面的 CRUD 逻辑结合,一个可立即测试的 API 就诞生了。
小提示:以上只是最简示例,实际开发中你可以根据业务需要,添加文章创建、按标签过滤、阅读量更新等更多接口,组合前面学到的 CRUD 方法即可。
6. 总结:速查表与选型建议
6.1 五分钟速查卡
6.2 什么时候选择 Tortoise-ORM?
✅ 强烈推荐
- 你喜欢 django ORM 的书写方式,不愿学习新的 ORM
- 项目为中小型系统、快速原型或 MVP
- 技术栈基于 FastAPI / Starlette 等异步框架
❌ 谨慎选择
- 大型企业级系统,需要极度精细的 SQL 控制
- 已有大量基于 SQLAlchemy 的历史代码
- 数据库迁移逻辑异常复杂,且需要高度自定义
🔗 扩展资源

