fix(query_builder): 优化分页查询逻辑,确保字段可用后再释放数据库连接

This commit is contained in:
Windpicker-owo
2025-12-11 21:50:28 +08:00
parent e8bffe4a87
commit ef0c569348

View File

@@ -215,26 +215,25 @@ class QueryBuilder(Generic[T]):
async with get_db_session() as session: async with get_db_session() as session:
result = await session.execute(paginated_stmt) result = await session.execute(paginated_stmt)
# .all() 已经返回 list无需再包装
instances = result.scalars().all() instances = result.scalars().all()
if not instances: if not instances:
# 没有更多数据 # 没有更多数据
break break
# 在 session 内部转换为字典列表 # 在 session 内部转换为字典列表,保证字段可用再释放连接
instances_dicts = [_model_to_dict(inst) for inst in instances] instances_dicts = [_model_to_dict(inst) for inst in instances]
if as_dict: if as_dict:
yield instances_dicts yield instances_dicts
else: else:
yield [_dict_to_model(self.model, row) for row in instances_dicts] yield [_dict_to_model(self.model, row) for row in instances_dicts]
# 如果返回的记录数小于 batch_size说明已经是最后一批 # 如果返回的记录数小于 batch_size说明已经是最后一批
if len(instances) < batch_size: if len(instances) < batch_size:
break break
offset += batch_size offset += batch_size
async def iter_all( async def iter_all(
self, self,