在 Python 中访存结果集中的行或列

执行返回一个或多个结果集的语句后,请使用 ibm_db API 中提供的其中一个函数对返回的行执行迭代。 如果结果集中的列包含大型数据(例如,BLOB 或 CLOB 数据),您可按列检索这些数据,以避免使用大量内存。

准备工作

必须存在由 ibm_db.exec_immediateibm_db.execute 函数返回,且具有一个或多个关联结果集的语句资源。

过程

要从结果集访存数据,请完成下列步骤:

  1. 通过调用其中一个访存函数,从结果集访存数据。
    表 1。 ibm_db fetch 函数
    函数 描述
    ibm_db.fetch_tuple 返回一个元组,该元组按列位置建立索引,表示结果集中的行。 各个列从 0 开始建立索引。
    ibm_db.fetch_assoc 返回一个字典,该字典按列名建立索引,表示结果集中的行。
    ibm_db.fetch_both 返回一个字典,该字典同时按列名和位置建立索引,表示结果集中的行。
    ibm_db.fetch_row 将结果集指针设置到下一行或请求的行。 使用此函数可以对结果集进行迭代。
    这些函数接受下列自变量:
    stmt
    有效的语句资源。
    row_number
    要从结果集检索的行的编号。 如果您在调用 ibm_db.exec_immediateibm_db.prepare 函数时已请求可滚动游标,请为此参数指定值。 使用缺省的仅正向游标时,每次调用访存方法都会返回结果集中的下一行。
  2. 可选: 如果您调用了 ibm_db.fetch_row 函数,那么对于通过结果集进行的每次迭代,请通过调用 ibm_db.result 函数从指定列中检索值。 要指定该列,您可以传递一个整数(表示该列在行中的位置,从 0 开始),或传递一个字符串(表示列名)。
  3. 继续访存行,直到访存方法返回 False 为止,这表示已到达结果集末尾。

    有关 ibm_db API 的更多信息,请参阅 https://github.com/ibmdb/python-ibmdb/wiki/APIs

示例

示例 1:通过调用 ibm_db.fetch_both 函数从结果集访存行

import ibm_db

conn = ibm_db.connect("database","username","password")
sql = "SELECT * FROM EMPLOYEE"
stmt = ibm_db.exec_immediate(conn, sql)
dictionary = ibm_db.fetch_both(stmt)
while dictionary != False:
    print "The ID is : ",  dictionary["EMPNO"]
    print "The Name is : ", dictionary[1]
    dictionary = ibm_db.fetch_both(stmt)

示例 2:通过调用 ibm_db.fetch_tuple 函数从结果集访存行

import ibm_db

conn = ibm_db.connect("database","username","password")
sql = "SELECT * FROM EMPLOYEE"
stmt = ibm_db.exec_immediate(conn, sql)
tuple = ibm_db.fetch_tuple(stmt)
while tuple != False:
    print "The ID is : ", tuple[0]
    print "The name is : ", tuple[1]
    tuple = ibm_db.fetch_tuple(stmt)

示例 3:通过调用 ibm_db.fetch_assoc 函数从结果集访存行

import ibm_db

conn = ibm_db.connect("database","username","password")
sql = "SELECT * FROM EMPLOYEE"
stmt = ibm_db.exec_immediate(conn, sql)
dictionary = ibm_db.fetch_assoc(stmt)
while dictionary != False:
    print "The ID is : ", dictionary["EMPNO"]
    print "The name is : ", dictionary["FIRSTNME"]
    dictionary = ibm_db.fetch_assoc(stmt)

示例 4:从结果集访存列

import ibm_db

conn = ibm_db.connect("database","username","password")
sql = "SELECT * FROM EMPLOYEE"
stmt = ibm_db.exec_immediate(conn, sql)
while ibm_db.fetch_row(stmt) != False:
    print "The Employee number is : ",  ibm_db.result(stmt, 0)
    print "The last name is : ", ibm_db.result(stmt, "LASTNAME") 

后续操作

准备好关闭数据库连接时,请调用 ibm_db.close 函数。 如果您尝试关闭通过 ibm_db.pconnect 创建的持久连接,那么关闭请求会返回 True,并且该连接会保留,以供下一个调用者使用。