Python - SQLite SELECT 查询只能使用一次吗?
我有一个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)
问题是,第一个循环能输出所有的行,而第二个循环却什么都不输出,这让我觉得很奇怪。为什么会这样呢?有没有办法让我多次使用db_rows?也许这是个bug?
我需要这样做,因为我有一些嵌套的代码(for循环和if判断),它们应该能重复使用db_rows。我觉得直接重复使用已经在内存中的db_rows会更快,而不是每次内层循环都重新执行查询。
谢谢。
2 个回答
3
返回的对象是一个迭代器。第一次循环会把这个迭代器用掉,第二次循环的时候它已经没有内容了。如果你想保留所有的结果,可以这样做:
rows = list(db_rows)
4
... 直接重用已经在内存中的数据库行应该会更快 ...
但实际上这些数据并不在内存里;它们是从数据库中一行一行地提取的。如果你想把结果放到内存里,就需要把它转换成一个列表。
row_list = list(db_rows)
for row in row_list:
...