Preparación y ejecución de sentencias de SQL con entrada de variables en Python

Para preparar y ejecutar una sentencia de SQL que incluya la entrada de variables, utilice las funciones ibm_db.prepare, ibm_db.bind_param e ibm_db.execute. Preparar una sentencia mejora el rendimiento porque el servidor de bases de datos crea un plan de acceso optimizado para la recuperación de datos que puede reutilizar si se vuelve a ejecutar la sentencia.

Antes de empezar

Obtener un recurso de conexión invocando una de las funciones de conexión en la API ibm_db. Consulte Conexión a un servidor de base de datos de IBM en Python.

Procedimiento

Para preparar y ejecutar una sentencia de SQL que incluye marcadores de parámetro:

  1. Llame a la función ibm_db.prepare, pasando 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, incluidos los signos de interrogación (?), como marcadores de parámetro para los valores de columna o predicado que requieran entrada de variables. 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 tiene éxito, devuelve un recurso de descriptor de contexto de sentencia que puede utilizar en llamadas de función posteriores relacionadas con la consulta.

    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.

  2. Opcional: Por cada marcador de parámetro en la serie de SQL, llame a la función ibm_db.bind_param, proporcionando los argumentos listados. Vincular valores de entrada a marcadores de parámetros garantiza que cada valor de entrada se trate como un único parámetro, evitando ataques de inyección de SQL.
    sentencia
    La sentencia preparada que devuelve la llamada a la función ibm_db.prepare.
    número_parámetro
    Un entero que representa la posición del marcador de parámetro en la sentencia de SQL.
    variable
    Valor que se debe utilizar en lugar del marcador de parámetro.
  3. Llame a la función ibm_db.execute, pasando los argumentos listados:
    sentencia
    Una sentencia preparada que devuelve ibm_db.prepare.
    parámetros
    Una tupla de parámetros de entrada que coinciden con los marcadores de parámetro contenidos en la sentencia preparada.

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

Ejemplo

Preparar y ejecutar una sentencia que incluye entrada de variables.

import ibm_db
conn = ibm_db.connect("database","username","password")
sql = "SELECT EMPNO, LASTNAME FROM EMPLOYEE WHERE EMPNO > ? AND EMPNO < ?"
stmt = ibm_db.prepare(conn, sql)
max = 50
min = 0
# Vincular explícitamente los parámetros
ibm_db.bind_param(stmt, 1, min)
ibm_db.bind_param(stmt, 2, max)
ibm_db.execute(stmt)
# Procesar resultados

# Invocar de nuevo sentencia preparada usando parámetros vinculados dinámicamente
param = max, min, 
ibm_db.execute(stmt, param)

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.