Se stai usando psycopg2, allora vorrai usare un cursore con nome, altrimenti proverà a leggere tutti i dati della query in memoria in una volta.
cursor = conn.cursor("some_unique_name")
cursor.execute("SELECT aid FROM pgbench_accounts")
for record in cursor:
something(record)
Questo recupererà i record dal server in batch di 2000 (valore predefinito di itersize
) e poi distribuiscili nel loop uno alla volta.