首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >psycopg2获取多个vs命名游标

问psycopg2获取多个vs命名游标
EN

Stack Overflow用户
提问于 2021-09-07 04:39:49
回答 1查看 638关注 0票数 2

根据“精神病学2”的服务器端游标文档

如果数据集太大,无法在客户端实际处理,则可以创建服务器端游标。使用这种游标,可以只向客户端传输受控制的数据量,这样就可以检查大型数据集,而不必将其完全保存在内存中。

我可以使用fetchmany实现类似的行为

代码语言:javascript
复制
fetchmany(100) # fetch first 100
fetchmany(50) # fetch next 50
fetchall() # fetch remaining

那么,在获取受控数据量的上下文中,fetchmany与服务器端游标有何不同?在什么情况下,我应该更喜欢一个而不是另一个?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-07 05:12:10

我认为关键在于服务器端游标文档的第一段(我的粗体):

当执行数据库查询时,--游标通常会获取后端返回的所有记录,并将它们传输到客户端进程。如果查询返回了大量数据,客户端将按比例分配大量内存。

使用“普通”游标,整个结果集将立即传输到客户端。使用命名游标,您可以根据需要在客户机/服务器界面上“拉”数据。

例如,请注意此程序的执行时间不同,这取决于它使用的游标类型(您可能需要调整连接参数):

代码语言:javascript
复制
import psycopg2, time
conn = psycopg2.connect(dbname='template1')
if False:
    c = conn.cursor('named')
else:
    c = conn.cursor()
c.execute('SELECT GENERATE_SERIES(1,100000000)')
print('Execute ok.')
rows = c.fetchmany(1)
print('Fetch ok.')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69082479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档