【问题标题】:pyodbc return multiple cursors from stored procedure with DB2pyodbc 从带有 DB2 的存储过程中返回多个游标
【发布时间】:2011-11-07 23:48:11
【问题描述】:

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

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

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

【问题讨论】:

    标签: stored-procedures db2 pyodbc database-cursor


    【解决方案1】:

    使用光标的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

    【讨论】:

      【解决方案2】:

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

      while True:    
          rows = cursor.fetchall()
          # process all result sets in the same place
          if not cursor.nextset():
              break    
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-24
        • 2015-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多