我试图了解这段代码在幕后的作用:
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游标通常会获取 后端返回的所有记录,将它们转移到 客户流程。
所以我很困惑 - 当我运行上面的代码时,它是将结果存储在服务器上并逐个取出它们,还是一次性带来所有内容?
答案 0 :(得分:5)
这取决于您配置psycopg2
的方式。请参阅itersize
和server side cursors。
默认情况下,它将所有行提取到客户端内存中,然后使用游标迭代所获取的行。但是根据上述文档,您可以改为从服务器端游标配置批量提取。