使用Tortoise-ORM和FastAPI构建评论系统



扫描二维码关注或者微信搜一搜:编程智域 前端至全栈交流与成长
一、Tortoise-ORM模型定义
我们首先在models.py中定义评论模型:
1 | from tortoise.models import Model |
代码解析:
auto_now_add
会在创建时自动记录时间- 通过
related_name
建立双向关联查询路径 - 复合索引提升常用查询条件的效率
- 继承Model基类获得ORM能力
二、Pydantic模型定义
在schemas.py中定义数据验证模型:
1 | from pydantic import BaseModel |
验证要点:
- 创建模型继承自基础模型
- 更新模型仅允许修改内容字段
- 响应模型启用orm_mode以兼容ORM对象
- 时间字段自动转换时间格式
三、路由层实现
核心路由实现在comments.py中:
1 | from fastapi import APIRouter, Depends, HTTPException |
技术要点:
- 使用
get_or_none
替代get
避免直接抛出异常 - 批量删除返回影响行数作为判断依据
- 异常处理覆盖数据库操作的各种失败场景
四、测试接口
使用requests测试接口:
1 | import requests |
五、课后Quiz
- 当查询不存在的评论ID时,应该返回什么HTTP状态码?
A) 200
B) 404
C) 500
D) 400
答案:B) 404。get_or_none
方法会返回None,触发自定义的404异常
- 如何实现评论的软删除功能?
A) 直接删除数据库记录
B) 添加is_deleted字段
C) 使用数据库回收站功能
D) 修改内容为”已删除”
答案:B) 添加布尔型is_deleted字段,查询时过滤已删除的记录
六、常见报错处理
报错:
tortoise.exceptions.IntegrityError: FOREIGN KEY constraint failed
原因:尝试关联不存在的用户或文章ID
解决:检查外键值是否存在,添加数据库约束报错:
pydantic.error_wrappers.ValidationError
原因:请求体缺少必填字段或字段类型错误
解决:检查请求体是否匹配schema定义,使用try-except捕获验证错误报错:
RuntimeError: Event loop is closed
原因:异步操作未正确关闭
解决:在main.py中添加关闭事件循环的hook:
1 | from fastapi import FastAPI |
余下文章内容请点击跳转至 个人博客页面 或者 扫码关注或者微信搜一搜:编程智域 前端至全栈交流与成长
,阅读完整的文章:
往期文章归档:
- 分层架构在博客评论功能中的应用与实现 | 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
- Pydantic字段元数据指南:从基础到企业级文档增强 | cmdragon’s Blog
- Pydantic Schema生成指南:自定义JSON Schema | cmdragon’s Blog
- Pydantic递归模型深度校验36计:从无限嵌套到亿级数据的优化法则 | cmdragon’s Blog
- Pydantic异步校验器深:构建高并发验证系统 | cmdragon’s Blog
- Pydantic根校验器:构建跨字段验证系统 | cmdragon’s Blog
- Pydantic配置继承抽象基类模式 | cmdragon’s Blog
- Pydantic多态模型:用鉴别器构建类型安全的API接口 | cmdragon’s Blog
- FastAPI性能优化指南:参数解析与惰性加载 | cmdragon’s Blog
- FastAPI依赖注入:参数共享与逻辑复用 | cmdragon’s Blog
- FastAPI安全防护指南:构建坚不可摧的参数处理体系 | cmdragon’s Blog