问题1: 以下哪种方式可以正确获取作者的所有册本?
A) author.books.all()
B) await author.books.all()
C) author.books
D) await author.books 正确答案: B 解析: Tortoise-ORM的所有查询方法都是异步的,必须使用await调用。直接访问关联属性(C/D)只能获取未执行的查询对象。 问题2: 如何避免N+1查询问题?
A) 使用select_related
B) 使用prefetch_related
C) 手动循环查询
D) 开启自动预加载 正确答案: B 解析: Tortoise-ORM通过prefetch_related实现关联数据的异步预加载,与同步ORM的select_related类似但采用不同实现机制。
1.6 常见报错办理方案
报错1: TransactionManagementError: Transaction not found for current thread
缘故原由: 在事务外执行需要事务的操纵
办理: 使用in_transaction()上下文管理器包裹数据库操纵
防备: 对写操纵统一添加事务管理
报错2: OperationalError: Connection is closed
缘故原由: 异步操纵未正确等待导致连接提前释放
办理: 检查所有数据库操纵是否都正确使用await
防备: 使用IDE的异步检查插件
报错3: FieldError: Related model "Author" not found
缘故原由: 模子引用字符串路径错误
办理: 确认模子导入路径与注册设置划一
防备: 使用模块绝对路径(如"app.models.Author")
1.7 情况设置指南
安装依赖:
pip install fastapi tortoise-orm uvicorn pydantic
复制代码
启动设置:
# main.py
from tortoise.contrib.fastapi import register_tortoise