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

1 投票
2 回答
924 浏览
提问于 2025-04-16 22:25

我有一个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:
   ...

撰写回答