【问题标题】:What's psycopg2 doing when I iterate a cursor?当我迭代游标时,psycopg2 在做什么?
【发布时间】:2017-01-23 00:34:06
【问题描述】:

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

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 游标通常会获取 后端返回的所有记录,传输到 客户端进程。

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

【问题讨论】:

    标签: python postgresql psycopg2 python-db-api


    【解决方案1】:

    这取决于您如何配置psycopg2。请参阅itersizeserver side cursors

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

    【讨论】:

      猜你喜欢
      • 2015-11-13
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 2015-08-06
      • 2016-10-02
      • 2011-09-22
      • 2019-04-12
      相关资源
      最近更新 更多