Что делает 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 2

1 ответ:

Это зависит от того, как вы настраиваете psycopg2. Видишь itersize икурсоры на стороне сервера .

По умолчанию он извлекает все строки в память клиента,а затем просто перебирает извлеченные строки курсором. Но в соответствии с приведенными выше документами вы можете настроить пакетные выборки из курсора на стороне сервера.