11

我试图了解这段代码在幕后做了什么:

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文档说以下内容

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

所以我很困惑——当我运行上面的代码时,它是将结果存储在服务器上并一个一个地获取它们,还是一次把所有的东西都带过来?

4

1 回答 1

11

这取决于您如何配置psycopg2. 查看itersize服务器端游标

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

于 2017-01-23T04:39:59.490 回答