为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用 sqlite3 将表中的所有行作为键、值生成

无法使用 sqlite3 将表中的所有行作为键、值生成

智慧大石 2021-12-21 15:06:07
出于某种原因,当我从 sqlite3 中的 SELECT 语句产生时,我无法遍历表中的所有行。当我将结果作为列表返回时,我拥有所有行。我不确定我做错了什么......如果我在外面的某个地方使用它,下面的代码只产生单行:def items(self):        for row in self._cursor.execute('SELECT key, value FROM dict_table'):            yield (self.loads(row[0]), self.loads(row[1]))如果我将返回值包装为一个列表,我会得到所有的行:def iteritems(self):        for row in self._cursor.execute('SELECT key, value FROM dict_table'):            yield (self.loads(row[0]), self.loads(row[1]))def items(self):        return(list(self.iteritems()))理想情况下,我只想将它用作生成器,而不是获取整个列表def items(self):        for row in self._cursor.execute('SELECT key, value FROM dict_table'):            yield (self.loads(row[0]), self.loads(row[1]))在代码的其他地方,我只想能够运行:for key, val in self.items():    print(val/key)编辑:我也尝试了以下解决方案但没有成功def iteritems(self):        for row in self._cursor.execute('SELECT key, value FROM dict_table'):            yield (self.loads(row[0]), self.loads(row[1]))def items(self):        yield from (self.iteritems())当我尝试迭代项目时,它仍然返回 1 行
查看完整描述

2 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

我能想到的可能是,您可能同时为多个查询重用同一个游标,而较早的迭代器正在停止,因为游标已用于以后的查询。

要解决此问题,您应该为每个查询创建一个新游标。


查看完整回答
反对 回复 2021-12-21
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

这是因为您一次又一次地获取行。请尝试以下解决方案


def items(self):

        rows = self._cursor.execute('SELECT key, value FROM dict_table')

        for row in rows:

            yield (row)


查看完整回答
反对 回复 2021-12-21
  • 2 回答
  • 0 关注
  • 122 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信