亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

無法使用 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 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號