Python 3.1中的sqlite接口基于PEP 249,它仅指定游标必须支持对查询结果记录的顺序访问。没有回头路了。如果您需要返回到先前获取的行,则应在首次获取它时将其保存,例如,创建一个获取数据的列表(或者实际上是使用fetchall
)。然后,您可以使用列表,并根据需要在行之间来回移动。
DB API设计背后的思想是支持高效执行代码,您只需要处理每一行一次即可。一个典型的循环如下所示:
这样,一旦循环的相应迭代完成,游标就可以丢弃对每一行数据的引用。它实际上并不会丢失任何内容,因为如果您要保留所有数据,则始终可以列出其中的一个列表,但是处理大型数据集的应用程序仍然可以一次处理一个行。这有点像在需要逐个处理可迭代元素时使用生成器表达式而不是列表的原因。