当我迭代游标时psycopg2做了什么?

Rob*_*Rob 6 python postgresql psycopg2 python-db-api

我试图了解这段代码在幕后的作用:

import psycopg2

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

根据PEP 249我的理解是,这是反复呼叫Cursor.next(),这相当于呼叫Cursor.fetchone().但是,psycopg2文档说如下:

执行数据库查询时,Psycopg游标通常会获取后端返回的所有记录,并将它们传输到客户端进程.

所以我很困惑 - 当我运行上面的代码时,它是将结果存储在服务器上并逐个取出它们,还是一次性带来所有内容?

Cra*_*ger 5

这取决于您的配置方式psycopg2.见itersize服务器端游标.

默认情况下,它将所有行提取到客户端内存中,然后使用游标迭代所获取的行.但是根据上述文档,您可以改为从服务器端游标配置批量提取.