2011-07-28 6 views
1

私はこのようになりますsqliteのクエリがあります:何が起こるPython - SQLiteのSELECTクエリは1回しか使用できません。

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) 

は、すべての行のループ出力のための第一、第二の出力は、私は奇妙な見つけたすべてのanythngないということです。何故ですか? db_rowsを何度も再利用する方法はありますか?これはバグでしょうか?

db_rowsを再利用するはずのネストされたコードがあるため、クエリーを再度実行するのではなく、メモリ内に既に存在するはずのdb_rowsを再利用する方が速いはずです内側のループの各反復についても同様である。

ありがとうございます。

答えて

4

が...それだけでメモリ内に既にあるべきdb_rowsを再利用するために高速でなければなりません...

除き、記憶にないことデータベースから一度に1行ずつ引き出されています。結果をメモリに取り込む場合は、リストに変換します。

row_list = list(db_rows) 

for row in row_list: 
    ... 
3

返されるオブジェクトはイテレータです。最初のループはイテレータを消費します。もう1つは既に疲れてしまっています。あなたが全体の結果を保持したい場合は、次の操作を行います。

rows = list(db_rows) 
関連する問題