Captación de filas o columnas de conjuntos de resultados en Python

Después de ejecutar una sentencia que devuelve uno o más conjuntos de resultados, utilice una de las funciones disponibles en la API ibm_db para iterar por las filas devueltas. Si el conjunto de resultados incluye columnas que contienen datos de gran tamaño (por ejemplo, datos BLOB o CLOB), puede recuperar los datos de columna en columna para evitar que se utilice demasiada memoria.

Antes de empezar

Debe disponer de un recurso de sentencia devuelto por la función ibm_db.exec_immediate o ibm_db.execute que tenga uno o varios conjuntos de resultados asociados.

Procedimiento

Para captar datos de un conjunto de resultados:

  1. Capte los datos de un conjunto de resultados llamando a una de las funciones de captación.
    Tabla 1. Funciones de captación de ibm_db
    Función Descripción
    ibm_db.fetch_tuple Devuelve una tupla, indexada por posición de columna, que representa una fila en un conjunto de resultados. Las columnas están indexadas en 0.
    ibm_db.fetch_assoc Devuelve un diccionario, indexado por nombre de columna, que representa una fila en un conjunto de resultados.
    ibm_db.fetch_both Devuelve un diccionario, indexado tanto por nombre de columna como por posición, que representa una fila en un conjunto de resultados.
    ibm_db.fetch_row Establece el puntero del conjunto de resultados en la siguiente fila o la fila solicitada. Utilice esta función para iterar por un conjunto de resultados.
    Estas funciones aceptan los argumentos listados:
    sentencia
    Un recurso de sentencia válido.
    número_fila
    El número de la fila que desea recuperar del conjunto de resultados. Especifique un valor para este parámetro si ha solicitado un cursor desplazable al llamar a la función ibm_db.exec_immediate o ibm_db.prepare. Con el cursor de sólo avance por omisión, cada llamada a un método de captación devuelve la fila siguiente del conjunto de resultados.
  2. Opcional: Si ha llamado a la función ibm_db.fetch_row, para cada iteración de todo el conjunto de resultados, recupere un valor de una columna especificada llamando a la función ibm_db.result. Puede especificar la columna pasando un entero que represente la posición de la columna en la fila (empezando por 0) o pasando una serie que represente el nombre de la columna.
  3. Continúe captando filas hasta que el método de captación devuelva un valor falso, lo que indicará que habrá llegado al final del conjunto de resultados.

    Para obtener más información sobre la API ibm_db, consulte http://code.google.com/p/ibm-db/wiki/APIs.

Ejemplo

Ejemplo 1: Captación de filas de un conjunto de resultados llamando a la función 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)

Ejemplo 2: Captación de filas de un conjunto de resultados llamando a la función 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)

Ejemplo 3: Captación de filas de un conjunto de resultados llamando a la función 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)

Ejemplo 4: Captación de columnas de un conjunto de resultados


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") 

Qué hacer a continuación

Cuando esté listo para cerrar la conexión a la base de datos, llame a la función ibm_db.close. Si intenta cerrar una conexión persistente creada con ibm_db.pconnect, la petición de cierre devuelve True, y la conexión permanecerá disponible para el siguiente interlocutor.