2017-01-23 62 views
1

我想了解這段代碼是做幕後:當迭代遊標時,psycopg2在做什麼?

import psycopg2 

c = psycopg2.connect('db=some_db user=me').cursor() 
c.execute('select * from some_table') 
for row in c: 
    pass 

PEP 249我的理解是,這是一邊喊Cursor.next()這是調用Cursor.fetchone()的等價物。然而,psycopg2文檔say the following

當執行一個數據庫查詢,該Psycopg光標通常取 所有後端返回的記錄,將它們轉移到 客戶端進程。

所以我很困惑 - 當我運行上面的代碼時,它是否將結果存儲在服務器上並一個接一個地取出它們,還是一次把所有東西都取出來?

回答

1

這取決於你如何配置psycopg2。見itersizeserver side cursors

默認情況下,它會將所有行提取到客戶端內存中,然後僅使用遊標遍歷所提取的行。但是根據上述文檔,您可以改爲從服務器端遊標配置批量提取。