SQLAlchemy中使用AsyncAttrs/awaitable_attrs加载关联对象的性能影响
AsyncAttrs/awaitable_attrs 关联加载的性能与重复查询问题
1. 加载未加载的关联关系时是否会阻塞事件循环?
会阻塞。正如官方文档所说,awaitable_attrs 的实现等效于调用 AsyncSession.run_sync(),而这个方法是在事件循环内部同步执行传入的可调用对象。当你首次访问未预加载的关联属性时,底层会执行同步的数据库查询操作——这类传统IO操作不会主动让出事件循环,会导致整个事件循环被阻塞,直到查询完成。如果你的异步服务追求高并发性能,这种场景下需要谨慎使用,避免影响其他请求的处理效率。
2. 已通过预加载加载的关联关系是否会被重复查询?
不会重复查询。awaitable_attrs 会先检查目标关联对象是否已经被加载到内存中(比如通过 selectinload、joinedload 这类预加载方式提前获取)。如果关联数据已经存在,就直接返回内存中的对象,不会触发新的数据库查询;只有当关联数据未被加载时,才会执行查询去获取数据。
内容的提问来源于stack exchange,提问作者DurandA
相关产品推荐
相关产品推荐

