MySQL Shell Python 模式 X DevAPI 用户指南  /  使用结果集  /  一次性获取所有数据项

9.4 一次性获取所有数据项

除了使用 fetchOne() 的模式,如在 第 9.3 节,“使用数据集” 中解释的那样,它允许应用程序逐个使用数据项,X DevAPI 还提供了一种使用 fetchAll() 的模式,它将数据集的所有数据项作为一个列表传递给应用程序。不同的 X DevAPI 实现使用它们编程语言的适当数据类型来表示列表。由于使用不同的数据类型,因此支持使用语言的本机结构来访问列表元素。以下示例假设 test 模式存在,并且 myTable 中存在员工表。

myResult = myTable.select(['name', 'age']) \
  .where('name like :name').bind('name','L%') \
  .execute()

myRows = myResult.fetch_all()

for row in myRows:
  print("%s is %s years old." % (row.name, row.age))

在混合使用 fetchOne()fetchAll() 从一个数据集中读取数据时,请记住,每次调用 fetchOne()fetchAll() 都会使用返回的数据项。使用的项不能再次请求。例如,如果应用程序调用 fetchOne() 来获取数据集的第一个数据项,那么随后的 fetchAll() 调用将返回第二个到最后一个数据项。第一个项不是 fetchAll() 返回的数据项列表的一部分。同样,如果在之前调用了 fetchAll() 之后,再次对数据集调用 fetchAll(),则第二次调用将返回一个空集合。

使用 fetchAll() 会迫使连接器在将列表作为整体传递给应用程序之前,在内存中构建所有项目的列表。列表的生存期独立于生成它的数据集的生存期。