2011-07-28 49 views
1

我有一個SQLite查詢,看起來像這樣:Python - SQLite SELECT查詢只能用一次?

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循環輸出所有行,第二個不輸出,在所有這些我覺得奇怪anythng。這是爲什麼?有沒有辦法讓我多次重複使用db_rows?也許這是一個錯誤?

我需要這個,因爲我有一些嵌套的代碼(for和if),它應該重用db_rows,並且認爲它應該更快地重新使用應該已經在內存中的db_rows而不是再次執行查詢並再次對每個內部循環進行迭代。

謝謝。

回答

4

...它應該是更快只需重新使用,應該是已經在內存db_rows ...

除它不在記憶中;它一次從數據庫中拖出一行。如果你想把結果存入內存,轉換爲列表。

row_list = list(db_rows) 

for row in row_list: 
    ... 
3

返回的對象是一個迭代器。第一個循環消耗迭代器。第二個已經耗盡了。如果要保留整個結果,這樣做:

rows = list(db_rows)