¿Cuáles son las ventajas y desventajas de la reutilización de un cursor frente a la creación de un nuevo cursor?

StackOverflow https://stackoverflow.com/questions/2035212

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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top