Psycopg2 memiliki antarmuka yang bagus untuk bekerja dengan kursor sisi server. Ini adalah template yang mungkin untuk digunakan:
with psycopg2.connect(database_connection_string) as conn:
with conn.cursor(name='name_of_cursor') as cursor:
cursor.itersize = 20000
query = "SELECT * FROM ..."
cursor.execute(query)
for row in cursor:
# process row
Kode di atas membuat koneksi dan secara otomatis menempatkan hasil kueri ke kursor sisi server. Nilai itersize
menetapkan jumlah baris yang akan ditarik klien pada suatu waktu dari kursor sisi server. Nilai yang Anda gunakan harus menyeimbangkan jumlah panggilan jaringan versus penggunaan memori pada klien. Misalnya, jika jumlah hasil Anda adalah tiga juta, sebuah itersize
nilai 2000 (nilai default) akan menghasilkan 1500 panggilan jaringan. Jika memori yang digunakan oleh 2000 baris ringan, tingkatkan jumlah itu.
Saat menggunakan for row in cursor
Anda tentu saja bekerja dengan satu baris pada satu waktu, tetapi Psycopg2 akan mengambil itersize
baris demi baris untuk Anda.
Jika Anda ingin menggunakan fetchmany
untuk beberapa alasan, Anda dapat melakukan sesuatu seperti ini:
while True:
rows = cursor.fetchmany(100)
if len(rows) > 0:
for row in rows:
# process row
else:
break
Penggunaan fetchmany
. ini tidak akan memicu panggilan jaringan ke server untuk lebih banyak baris hingga kumpulan yang diambil sebelumnya telah habis. (Ini adalah contoh berbelit-belit yang tidak memberikan apa pun selain kode di atas, tetapi menunjukkan cara menggunakan fetchmany
jika ada kebutuhan.)