Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在SQLite中导航光标行(我们可以倒带/重置光标,例如返回第一行吗?)_Python_Sqlite_Fetch - Fatal编程技术网

Python 在SQLite中导航光标行(我们可以倒带/重置光标,例如返回第一行吗?)

Python 在SQLite中导航光标行(我们可以倒带/重置光标,例如返回第一行吗?),python,sqlite,fetch,Python,Sqlite,Fetch,我试图理解在顺序处理光标行时,以下内置函数是如何工作的。这些描述来自Python3.1手册(使用SQLite3) 获取查询结果集的下一行,返回单个序列 Cursor.fetchmany() 获取查询结果的下一组行,返回一个列表 Cursor.fetchall() 获取查询结果的所有(剩余)行,并返回列表 Cursor.fetchall() 因此,如果我有一个循环,在这个循环中,我使用cursor.fetchone()一次处理一行,而后面的一些代码要求我返回到第一行,或者使用fetchall

我试图理解在顺序处理光标行时,以下内置函数是如何工作的。这些描述来自Python3.1手册(使用SQLite3)

获取查询结果集的下一行,返回单个序列

Cursor.fetchmany()
获取查询结果的下一组行,返回一个列表

Cursor.fetchall()
获取查询结果的所有(剩余)行,并返回列表

Cursor.fetchall()
因此,如果我有一个循环,在这个循环中,我使用cursor.fetchone()一次处理一行,而后面的一些代码要求我返回到第一行,或者使用fetchall()获取所有行,我该如何做呢

这个概念对我来说有点奇怪,尤其是来自Foxpro背景,它有一个记录指针的概念,可以移动到光标的第一行或最后一行(上/下),或者移动到第n行(下)

任何帮助都将不胜感激


Alan

Python 3.1中的SQLite接口基于,它只指定游标必须支持对查询结果记录的顺序访问。没有办法回去了。如果需要返回到以前提取的行,则应在首次提取行时保存该行,例如,创建提取数据的列表(或者实际上,只需使用
fetchall
)。然后,您可以使用该列表,并在行之间来回移动

DB API设计背后的思想是支持代码的高效执行,其中您只需要处理每一行一次。典型的循环如下所示:

for a,b,c in cursor.fetchone():
    # process it

这样,一旦循环的相应迭代完成,游标就可以放弃对每行数据的引用。它实际上不会丢失任何东西,因为如果您想保留所有数据,您可以随时从中列出一个列表,但是处理大型数据集的应用程序仍然能够一次处理一行。这有点像在需要逐个处理iterable元素时使用生成器表达式而不是列表背后的推理。

David,感谢您的解释。现在开始有意义了。关于。还有另一个选项:
用于游标中的行
,我猜它是
游标.fetchall()的生成器