Почему я могу использовать результаты запроса только один раз? - PullRequest
0 голосов
/ 01 мая 2019

Я новичок в SQL и psycopg2.Я немного поиграюсь и попытаюсь найти наш способ отображения результатов запроса.У меня есть небольшой скрипт, в котором я устанавливаю соединение с базой данных и создаю курсор для выполнения запроса.

from psycopg2 import connect

conn = connect(host="localhost", user="postgres", dbname="portfolio",
               password="empty")

cur = conn.cursor()

cur.execute("SELECT * FROM portfolio")

for record in cur:
    print("ISIN: {}, Naam: {}".format(record[0], record[1]))

print(cur.fetchmany(3))

cur.close()
conn.close()

Если я запускаю этот код, первая печать в порядке, но вторая инструкция print возвращает[].

Если я запускаю только одно из двух операторов print, я каждый раз получаю результат.Может кто-нибудь объяснить мне, почему?

1 Ответ

3 голосов
/ 01 мая 2019

Курсор перебирает результаты и возвращает по одному за раз. Когда он вернул их все, он больше не может вернуться. Это точно так же, как когда вы зацикливаете строки в файле (больше нет строк после достижения конца файла) или даже зацикливаете список (в списке больше нет записей после последнего).

Если вы хотите манипулировать результатами в Python, вам, вероятно, следует прочитать их в список, который затем вы можете просматривать столько раз, сколько захотите, либо искать, сортировать и т. Д., Либо обращаться совершенно случайно.

cur.execute("SELECT * FROM portfolio")

result = cur.fetchall()

for record in result:
    print("ISIN: {}, Naam: {}".format(record[0], record[1]))

print(result[0:3]))
...