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

时间:2017-01-23 00:34:07

标签: 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

根据PEP 249我的理解是,这是多次调用Cursor.next(),这相当于调用Cursor.fetchone()。但是,psycopg2文档say the following

  

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

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

1 个答案:

答案 0 :(得分:5)

这取决于您配置psycopg2的方式。请参阅itersizeserver side cursors

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