猿问

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

出于某种原因,当我从 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 行


智慧大石
浏览 123回答 2
2回答

繁华开满天机

我能想到的可能是,您可能同时为多个查询重用同一个游标,而较早的迭代器正在停止,因为游标已用于以后的查询。要解决此问题,您应该为每个查询创建一个新游标。

明月笑刀无情

这是因为您一次又一次地获取行。请尝试以下解决方案def items(self):        rows = self._cursor.execute('SELECT key, value FROM dict_table')        for row in rows:            yield (row)
随时随地看视频慕课网APP

相关分类

Python
我要回答