Preparación y ejecución de una única sentencia de SQL en Python

Para preparar y ejecutar una única sentencia de SQL, utilice la función ibm_db.exec_immediate. Para evitar amenazas a la seguridad por ataques de inyección de SQL, utilice la función ibm_db.exec_immediate sólo para ejecutar sentencias de SQL compuestas de series estáticas. La interpolación de variables de Python que representan la entrada del usuario en la sentencia de SQL puede exponer la aplicación a ataques de inyección de SQL.

Antes de empezar

Obtener un recurso de conexión invocando una de las funciones de conexión en la API ibm_db. Para obtener más información, consulte el apartado Conexión a un servidor de base de datos de IBM en Python.

Procedimiento

Para preparar y ejecutar una única sentencia de SQL, llame a la función ibm_db.exec_immediate, proporcionando los argumentos listados:
conexión
Un recurso de conexión de base de datos válido devuelto por la función ibm_db.connect o ibm_db.pconnect.
sentencia
Una serie que contiene la sentencia de SQL. Esta serie puede incluir una expresión XQuery a la que llama la función XMLQUERY.
opciones
Opcional: Un diccionario que especifica el tipo de cursor que debe devolverse para conjuntos de resultados. Puede utilizar este parámetro para solicitar un cursor desplazable para servidores de bases de datos que admitan este tipo de cursor. Por omisión, se devuelve un cursor de sólo avance.

Si la llamada de función falla (devuelve False), puede utilizar la función ibm_db.stmt_error o ibm_db.stmt_errormsg para recuperar información de diagnóstico sobre el error.

Si la llamada de función tiene éxito, puede utilizar la función ibm_db.num_rows para devolver el número de filas que la sentencia de SQL ha devuelto o a las que ha afectado. Si la sentencia de SQL devuelve un conjunto de resultados, puede empezar a captar las filas.

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

Ejemplo

Ejemplo 1: Ejecutar una única sentencia de SQL


import ibm_db
conn = ibm_db.connect("database","username","password")
stmt = ibm_db.exec_immediate(conn, "UPDATE employee SET bonus = '1000' WHERE job =
'MANAGER'")
print "Number of affected rows: ", ibm_db.num_rows(stmt)

Ejemplo 2: Ejecutar una expresión XQuery


import ibm_db
conn = ibm_db.connect("database","username","password")
if conn:
    sql = "SELECT XMLSERIALIZE(XMLQUERY('for $i in $t/address where
    $i/city = \"Olathe\" return <zip>{$i/zip/text()}</zip>'
    passing c.xmlcol as \"t\") AS CLOB(32k)) FROM xml_test c WHERE id = 1"
    stmt = ibm_db.exec_immediate(conn, sql)
    result = ibm_db.fetch_both(stmt)
    while( result ):
        print "Result from XMLSerialize and XMLQuery:", result[0]
        result = ibm_db.fetch_both(stmt)

Qué hacer a continuación

Si la sentencia de SQL devuelve uno o varios conjuntos de resultados, puede empezar a captar filas del recurso de sentencia.