2010-01-09 17 views
13

En cx_Oracle (u Oracle en general), es posible asignar un cursor para cada consulta o reutilizar un cursor entre varias consultas.¿Cuáles son las ventajas y desventajas de reutilizar un cursor vs. crear un nuevo cursor?

def getSomeData(curs):   # case 1: pass in a cursor, which is generally 
    curs.execute('select ...') #   reused across queries 
    return curs.fetchall() 

def getSomeData(conn):   # case 2: pass in a connection,allocate 
    curs=conn.cursor()   #   a cursor for this query 
    curs.execute('select ...') 
    return curs.fetchall() 

Por supuesto, ambos enfoques devuelven los mismos datos.

¿Cuáles son las ventajas y desventajas entre los dos enfoques? ¿Es uno particularmente más o menos eficiente? ¿Hay algún riesgo potencial de reutilizar un cursor sobre muchas consultas?

Respuesta

9

Puede reutilizar un cursor cx_Oracle tanto como desee, no hay problema. Si está ejecutando miles de pequeñas consultas en un espacio de tiempo pequeño, podría ver una ligera mejora en el rendimiento al volver a utilizar el cursor, pero lo dudo.

Algunas veces crearé nuevos cursores y otras veces reutilizaré uno existente, dependiendo de si hace que el código sea más fácil de leer y comprender.

Por ejemplo, si tengo una variedad de procedimientos que necesitan acceder a la base de datos, podría pasar un objeto de conexión Oracle o un cursor creado en esa conexión.

Todo lo que hace que su código sea más legible y más fácil de mantener es lo que yo buscaría.

Cuestiones relacionadas