2017-01-23 4 views
1

私は、このコードは、舞台裏でやっていることを理解しようとしています:PEP 249パーカーソルを反復処理するときにpsycopg2は何をしていますか?

import psycopg2 

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

私の理解はこれが繰り返しCursor.fetchone()を呼び出すのと等価であるCursor.next()を呼んでいたということでした。しかし、psycopg2ドキュメントsay the following:データベースクエリを実行すると

、Psycopgカーソルは通常 クライアントプロセスに転送、バックエンドで返さ すべてのレコードをフェッチします。

私は混乱しています。上記のコードを実行すると、結果がサーバーに保存され、1つずつ取得されるのでしょうか、またはすべてを一度に持ち出すのでしょうか?

答えて

1

どのように設定するかによって異なります。psycopg2itersizeおよびserver side cursorsを参照してください。

デフォルトでは、すべての行がクライアントのメモリにフェッチされ、カーソルでフェッチされた行が反復処理されます。しかし、上記のドキュメントでは、代わりにサーバー側のカーソルからバッチフェッチを構成することができます。

関連する問題