Что делает psycopg2, когда я повторяю курсор?
Я пытаюсь понять, что этот код делает за кулисами:
import psycopg2
c = psycopg2.connect('db=some_db user=me').cursor()
c.execute('select * from some_table')
for row in c:
pass
Per PEP 249 мое понимание состояло в том, что это был многократный вызов Cursor.next()
, что эквивалентно вызову Cursor.fetchone()
. Однако в psycopg2
docs говорится следующее:
Когда выполняется запрос базы данных, курсор Psycopg обычно извлекает все записи возвращаются бэкендом, перенося их на сервер. клиентский процесс.
Поэтому я в замешательстве - когда я бегу код выше, он сохраняет результаты на сервере и получает их один за другим, или он приносит все сразу?
1 ответ:
Это зависит от того, как вы настраиваете
psycopg2
. Видишьitersize
икурсоры на стороне сервера .По умолчанию он извлекает все строки в память клиента,а затем просто перебирает извлеченные строки курсором. Но в соответствии с приведенными выше документами вы можете настроить пакетные выборки из курсора на стороне сервера.