4

我有一个从 db2 数据库调用存储过程的 python 程序。我results = cursor.fetchall()用来处理我的存储过程的结果。但是,我的存储过程返回两个游标。results只包含第一个。我需要一种方法来遍历尽可能多的游标。我希望fetchmany()这会是我的答案,但事实并非如此。

我需要能够执行多个结果集,因为我正在编写的程序只能调用一个存储过程。回去要花很多时间才能打电话给两个。除了这些东西之一,我需要让 10 个游标返回。一切都是动态的,因此应用程序不知道它正在运行什么程序,它只是获取数据并将其吐入不知道含义的 Excel 中。我需要一个游标用于数据,另一个游标用于不同类型的计数和总计。

我正在寻找一个内置函数来执行此操作,或者甚至可能是一个不同的库,因为我已经完成了我的谷歌搜索,看起来 pyodbc 没有为 DB2 执行此操作。DB2 是一个要求。

4

2 回答 2

10

使用nextset()游标的方法:https ://github.com/mkleehammer/pyodbc/wiki/Cursor#nextset

示例代码:

# fetch rows from first set
rows = cursor.fetchall()    
# process first set rows here

# advance to next result set
while (cursor.nextset()):    
    # fetch rows from next set, discarding first
    rows = cursor.fetchall()    
    # process next set rows here

nextset()True如果有其他结果集可用,将返回,后续游标提取方法将返回下一组中的行。None如果没有其他可用的集合,则该方法返回。

于 2011-08-31T21:54:28.997 回答
2

只是为了记录而做的一个小简化:

while True:    
    rows = cursor.fetchall()
    # process all result sets in the same place
    if not cursor.nextset():
        break    
于 2016-08-19T08:04:18.217 回答