我有一个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而不是再次执行查询应该更快再次为内循环的每次迭代。
谢谢。
答案 0 :(得分:4)
...重新使用应该已经在内存中的db_rows应该更快......
除了它不在记忆中;它一次从数据库中拉出一行。如果要将结果拉入内存,请转换为列表。
row_list = list(db_rows)
for row in row_list:
...
答案 1 :(得分:3)
返回的对象是迭代器。第一个循环使用迭代器。第二个让它已经筋疲力尽了。如果要保留整个结果,请执行以下操作:
rows = list(db_rows)