fix(query_builder): 优化分页查询逻辑,确保字段可用后再释放数据库连接
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user