当前位置: 首页 > 面试题库 >

在SQLite中导航游标行(例如,我们可以回退/重置游标,即返回第一行吗?)

丁曦
2023-03-14
问题内容

我试图了解当顺序处理游标行时以下内置函数如何工作。这些描述来自Python 3.1手册(使用SQLite3)

Cursor.fetchone()

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

Cursor.fetchmany()

获取查询结果的下一组行,并返回一个列表。

Cursor.fetchall()

获取查询结果的所有(剩余)行,并返回一个列表。

因此,如果我有一个循环,其中我使用cursor.fetchone()一次处理一行,而稍后的代码要求我返回第一行,或使用fetchall()提取所有行,该如何做?

这个概念对我来说有点奇怪,特别是来自Foxpro背景,它具有记录指针的概念,可以将记录指针移到光标的第一行或最后一行(转到顶部/底部),或移至第n行(去n)

任何帮助,将不胜感激。

艾伦


问题答案:

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

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

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

这样,一旦循环的相应迭代完成,游标就可以丢弃对每一行数据的引用。它实际上并不会丢失任何内容,因为如果您要保留所有数据,则始终可以列出其中的一个列表,但是处理大型数据集的应用程序仍然可以一次处理一个行。这有点像在需要逐个处理可迭代元素时使用生成器表达式而不是列表的原因。



 类似资料:
  • 问题内容: 我正在开发一个短信应用程序,我试图从每次对话中获取最新的短信。 这是我的SQL语句: 我在SQLite Expert中运行了查询,并且得到了正确的响应: 但是,当我在应用程序中运行它时,我得到: 这是我的桌子 这是我的Datamanipulator类: 问题答案: 使用时,结果的每一行对应于原始表的多行。这些结果的计算有三种可能性: 具有聚合函数的列类似于或计算组中所有行的值; 子句中

  • 问题内容: 起初我想注意到英语不是我的母语,无论我希望我们不会误会 我在Android上编写了简单的应用程序,发现了一个问题,也解决了该问题,但是无论如何,我都想了解为什么会这样。 我创建了一个sql表: 并以这种方式将数据放入其中: 现在..一切正常,我使用此应用程序进行了验证,可以存储的值正确。 不过,当我尝试使用1得到错误的值2)获得日期值时,它的负数(例如-1004124) 因此,我尝试用

  • 我有以下使用嵌套游标的代码。它们都不是空的,但我在内部游标上收到错误“android.database.CursorIndexOutOfBoundsException: Index 0请求,大小为0”。 getName()方法: 我无法理解我在哪里做错了。有没有不同的方法来处理sqlite db中的嵌套游标。请帮助。 谢谢

  • 当我的数据库是空的,或者它刚刚被创建时,我得到了这个错误, 03-10 17:34:40.758: E/AndroidRuntime(1144):java.lang.Runtime异常:无法启动活动ComponentInfo{com.example.adressbooktake2/com.example.adressbooktake2。主要活动}:android.database.CursorIn

  • 我知道之前有人问过这个问题,但我还是希望有人能帮我。我使用meteorchef的基本模板。 从ScoreTotal.js在用户界面/容器目录我做: 在服务器/出版物中,我有: 当我console.log结果时,我看到聚合有效,但我得到错误“发布函数返回非光标数组” 感谢您的帮助!

  • 问题内容: 如果我在Web服务器(Tomcat)中有一个文件并创建标签,则可以观看视频,暂停视频,浏览视频并在完成后重新启动。 但是,如果我创建了一个REST接口,该接口在请求时发送视频文件,并将其URL添加到标签中,那么我只能播放和暂停。 没有倒带,没有快进,没有导航 ,什么也没有。 那么,有什么办法可以解决此问题?我在某处缺少什么吗? 视频文件与REST接口位于同一服务器中 ,并且REST接口