You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GridDB Python客户端中,fetch(False)的RowSet迭代后Query对象是否不可复用?

GridDB Python客户端Query对象在fetch(False)后的生命周期说明

是的,GridDB Python客户端的Query对象在其返回的RowSet被完全迭代后,确实会被设计为不可复用/已耗尽状态,无法通过再次调用fetch(False)获取新的结果集。

核心原因

GridDB Python客户端的底层实现中,Query对象与单次查询的上下文(包括查询游标)绑定。当你第一次调用fetch(False)并将返回的RowSet完全迭代(比如用list(rs1)遍历所有结果)后,底层的查询游标已经移动到结果集的末尾,且客户端没有提供重置游标或重新执行查询的机制。此时再次调用同一Query对象的fetch(False),会直接返回空的RowSet。

结合测试案例验证

你的测试流程完全印证了这一特性:

  1. 首次执行查询:
query = container.query("SELECT *")
rs1 = query.fetch(False)
rows1 = list(rs1)
print(rows1)  # 输出 [(1, 10.5), (2, 20.0)]

此时RowSet被完全迭代,Query对象的查询上下文已耗尽。

  1. 复用同一Query对象再次查询:
rs2 = query.fetch(False)
rows2 = list(rs2)
print(rows2)  # 输出 []

因为原Query的查询游标已走到末尾,无法再获取新数据。

  1. 验证数据未丢失且新Query有效:
print(container.get(1))  # 输出 (1, 10.5),数据仍存在
query = container.query("SELECT *")  # 创建新Query对象
rs3 = query.fetch(False)
print(list(rs3))  # 再次输出完整结果集

环境一致性

该行为在以下环境中均会复现:

  • GridDB CE 5.x
  • GridDB Cloud
  • Python 3.10

正确做法

如果需要重复执行同一查询逻辑,必须每次调用container.query()创建新的Query对象,而非复用已耗尽的旧对象。

内容的提问来源于stack exchange,提问作者Klc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 21:53:11