¿Cuáles son las ventajas y desventajas de la reutilización de un cursor frente a la creación de un nuevo cursor?
Pregunta
En cx_Oracle (o Oracle en general), es posible asignar un cursor para cada consulta, o volver a utilizar un cursor a través de varias consultas.
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 regresar los mismos datos.
¿Cuáles son las ventajas y desventajas entre los dos enfoques? Es uno particular más o menos eficiente? ¿Hay peligros potenciales para la reutilización de un cursor sobre el número de consultas?
Solución
Se puede volver a utilizar un cursor cx_Oracle tanto como te gusta, no hay problema. Si está ejecutando miles de pequeñas consultas en un pequeño espacio de tiempo, podría una ligera mejora del rendimiento reutilizando el cursor, pero lo dudo.
Voy a veces crear nuevos cursores, y otras veces volver a usar una ya existente, dependiendo de si se hace que el código sea más fácil de leer y entender.
Por ejemplo, si tengo una variedad de procedimientos que necesitan acceder a la base de datos, podría pasar un objeto de conexión de Oracle alrededor, o un cursor creado en esa conexión.
Lo que hace que el código sea más legible y más fácil de mantener es lo que iría a.