Python - SQLite SELECT查询只能使用一次?

时间:2011-07-28 08:40:05

标签: python sqlite

我有一个sqlite查询,如下所示:

db_rows = db_cursor.execute(
    "SELECT * FROM my_table"
)

# check1
for row in db_rows:
    print(row)

# check2
for row in db_rows:
    print(row)

第一个for循环输出所有行,第二个不输出任何我觉得奇怪的东西。这是为什么?有没有办法让我多次重复使用db_rows?也许这是一个错误?

我需要这个,因为我有一些嵌套代码(for和if)应该重用db_rows,并且相信重新使用应该已经在内存中的db_rows而不是再次执行查询应该更快再次为内循环的每次迭代。

谢谢。

2 个答案:

答案 0 :(得分:4)

  

...重新使用应该已经在内存中的db_rows应该更快......

除了它不在记忆中;它一次从数据库中拉出一行。如果要将结果拉入内存,请转换为列表。

row_list = list(db_rows)

for row in row_list:
   ...

答案 1 :(得分:3)

返回的对象是迭代器。第一个循环使用迭代器。第二个让它已经筋疲力尽了。如果要保留整个结果,请执行以下操作:

rows = list(db_rows)