FastAPI与Tortoise-ORM开发的神奇之旅



扫描二维码
关注或者微信搜一搜:编程智域 前端至全栈交流与成长
探索数千个预构建的 AI 应用,开启你的下一个伟大创意:https://tools.cmdragon.cn/
从API到数据库:FastAPI + Tortoise-ORM全链路开发指南
1. 环境准备与包安装
首先创建Python虚拟环境并安装必要依赖:
1 | python -m venv venv |
2. 数据模型定义
创建包含软删除功能的文章模型:
1 | # models.py |
3. Pydantic模式定义
定义请求响应数据结构:
1 | # schemas.py |
4. FastAPI应用配置
配置数据库连接和路由:
1 | # main.py |
5. 完整API端点实现
5.1 创建文章
1 |
|
5.2 分页查询
1 |
|
5.3 条件更新
1 |
|
5.4 软删除
1 |
|
6. 关键实现解析
6.1 分页机制原理
- 计算skip值:
skip = (page - 1) * per_page
- 数据库查询使用offset和limit实现分页
- 实际生产环境建议使用游标分页(Cursor Pagination)
6.2 条件更新安全
- 通过
get_or_none
确保记录存在 - 使用
filter().update()
实现原子操作 exclude_unset=True
忽略未传字段
6.3 软删除实现
- 添加is_deleted字段
- 重写默认查询过滤器:
1 | class SoftDeleteManager(fields.Model): |
7. 课后Quiz
Q1:如何防止SQL注入攻击?
A:使用ORM的参数化查询,避免拼接SQL语句。Tortoise-ORM会自动处理查询参数,例如:
1 | await Article.filter(title="Safe' OR 1=1--") |
实际生成的SQL会是参数化查询,特殊字符会被正确转义
Q2:为什么在更新时使用exclude_unset=True?
A:该参数会忽略未提供的字段,实现部分更新。例如用户只修改标题时,不会影响content字段
Q3:如何实现真正的物理删除?
A:直接使用delete()方法:
1 | await Article.filter(id=1).delete() |
8. 常见报错解决方案
错误1:422 Validation Error
- 原因:请求体不符合Pydantic模型要求
- 解决:检查请求头Content-Type是否正确(应为application/json),确认字段类型和必填项
错误2:404 Not Found
- 原因:尝试操作不存在的记录
- 解决:在更新/删除前先使用get_or_none检查记录是否存在
错误3:RuntimeError - Event loop closed
- 原因:在同步代码中调用异步方法
- 解决:确保所有数据库操作都在async函数中执行,使用await调用
启动服务命令:
1 | uvicorn main:app --reload |
访问 http://localhost:8000/docs 即可测试API接口。本文实现的系统具备以下安全特性:
- 用户认证隔离数据访问
- 所有输入参数自动验证
- 数据库操作防注入
- 细粒度的权限控制
余下文章内容请点击跳转至 个人博客页面 或者 扫码关注或者微信搜一搜:编程智域 前端至全栈交流与成长
,阅读完整的文章:
往期文章归档:
- DDD分层设计与异步职责划分:让你的代码不再“异步”混乱 | cmdragon’s Blog
- 异步数据库事务锁:电商库存扣减的防超卖秘籍 | cmdragon’s Blog
- FastAPI中的复杂查询与原子更新指南 | cmdragon’s Blog
- 深入解析Tortoise-ORM关系型字段与异步查询 | cmdragon’s Blog
- FastAPI与Tortoise-ORM模型配置及aerich迁移工具 | cmdragon’s Blog
- 异步IO与Tortoise-ORM的数据库 | cmdragon’s Blog
- FastAPI数据库连接池配置与监控 | cmdragon’s Blog
- 分布式事务在点赞功能中的实现 | cmdragon’s Blog
- Tortoise-ORM级联查询与预加载性能优化 | cmdragon’s Blog
- 使用Tortoise-ORM和FastAPI构建评论系统 | cmdragon’s Blog
- 分层架构在博客评论功能中的应用与实现 | cmdragon’s Blog
- 深入解析事务基础与原子操作原理 | cmdragon’s Blog
- 掌握Tortoise-ORM高级异步查询技巧 | cmdragon’s Blog
- FastAPI与Tortoise-ORM实现关系型数据库关联 | cmdragon’s Blog
- Tortoise-ORM与FastAPI集成:异步模型定义与实践 | cmdragon’s Blog
- 异步编程与Tortoise-ORM框架 | cmdragon’s Blog
- FastAPI数据库集成与事务管理 | cmdragon’s Blog
- FastAPI与SQLAlchemy数据库集成 | cmdragon’s Blog
- FastAPI与SQLAlchemy数据库集成与CRUD操作 | cmdragon’s Blog
- FastAPI与SQLAlchemy同步数据库集成 | cmdragon’s Blog
- SQLAlchemy 核心概念与同步引擎配置详解 | cmdragon’s Blog
- FastAPI依赖注入性能优化策略 | cmdragon’s Blog
- FastAPI安全认证中的依赖组合 | cmdragon’s Blog
- FastAPI依赖注入系统及调试技巧 | cmdragon’s Blog
- FastAPI依赖覆盖与测试环境模拟 | cmdragon’s Blog
- FastAPI中的依赖注入与数据库事务管理 | cmdragon’s Blog
- FastAPI依赖注入实践:工厂模式与实例复用的优化策略 | cmdragon’s Blog
- FastAPI依赖注入:链式调用与多级参数传递 | cmdragon’s Blog
- FastAPI依赖注入:从基础概念到应用 | cmdragon’s Blog
- FastAPI中实现动态条件必填字段的实践 | cmdragon’s Blog
- FastAPI中Pydantic异步分布式唯一性校验 | cmdragon’s Blog
- 掌握FastAPI与Pydantic的跨字段验证技巧 | cmdragon’s Blog
- FastAPI中的Pydantic密码验证机制与实现 | cmdragon’s Blog
- 深入掌握FastAPI与OpenAPI规范的高级适配技巧 | cmdragon’s Blog
- XML Sitemap