Python - SQL-запрос SELECT можно использовать только один раз? - PullRequest
1 голос
/ 28 июля 2011

У меня есть запрос 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 несколько раз?Возможно, это ошибка?

Мне это нужно, потому что у меня есть некоторый вложенный код (для и если), который должен повторно использовать db_rows и считаю, что это должно быть быстрее, просто повторно использовать db_rows, который долженв памяти вместо того, чтобы выполнять запрос снова и снова для каждого изменения внутреннего цикла.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 28 июля 2011

... должно быть быстрее просто повторно использовать db_rows, которые уже должны быть в памяти ...

За исключением того, что это не в памяти; он извлекается из базы данных по одной строке за раз. Преобразуйте в список, если хотите вывести результаты в память.

row_list = list(db_rows)

for row in row_list:
   ...
3 голосов
/ 28 июля 2011

Возвращенный объект является итератором.Первый цикл потребляет итератор.Второй получает это уже исчерпан.Если вы хотите сохранить весь результат, сделайте следующее:

rows = list(db_rows)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...