【问题标题】:Psycopg2 cursor.execute return a generatorPsycopg2 cursor.execute 返回一个生成器
【发布时间】:2016-07-24 19:18:51
【问题描述】:

假设我只有 1GB 内存和 1TB 硬盘空间。

这是我的代码,我正在使用 postgres 数据库。

import psycopg2

try:
   db = psycopg2.connect("database parameters")
   conn = db.cursor()
   conn.execute(query) 

   #At this point, i am running 
   for row in conn:

对于这种情况,我想假设 conn 是一个生成器是安全的,因为我似乎无法在线找到明确的答案,并且我无法在我的环境中尝试它,因为我无法承受系统崩溃的代价。

我希望此查询返回超过 100 GB 的数据

我正在使用 python 2.7 和 psycopg2 库

【问题讨论】:

  • 为什么不编写一个只返回一个结果的查询并按照this answer 尝试(isinstance(gen, types.GeneratorType)?如果conn.execute() 返回一个生成器,那应该会立即告诉你。

标签: python database postgresql


【解决方案1】:

如果您在示例中使用匿名游标,则整个查询结果将被读入内存。

如果您使用named cursor,那么它将在循环数据时从服务器中读取数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 2011-01-09
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    相关资源
    最近更新 更多