Quali sono i compromessi di riutilizzo di un cursore vsla creazione di un nuovo cursore?
Domanda
In cx_Oracle (o Oracle in generale), è possibile assegnare un cursore per ogni query, o per riutilizzare un cursore attraverso diverse query.
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()
Naturalmente, entrambi gli approcci restituire gli stessi dati.
Quali sono i compromessi tra i due approcci?È uno in particolare, più o meno efficiente?Ci sono potenziali insidie per il riutilizzo di un cursore su molte query?
Soluzione
È possibile ri-utilizzare una cx_Oracle cursore, come più ti piace, nessun problema.Se si sta eseguendo l'migliaia di piccole query in un piccolo spazio di tempo, si potrebbe vedere un leggero miglioramento delle prestazioni ri-utilizzando il cursore, ma ho i miei dubbi.
Io a volte creare nuovi cursori, e altre volte ri-utilizzare uno esistente, a seconda se si rende il codice più facile da leggere e capire.
Per esempio, se ho una serie di procedure che devono accedere al database, potrei passare una connessione a Oracle oggetto intorno, o un cursore creato su tale connessione.
Ciò che rende il codice più leggibile e più facile da mantenere è quello che mi piacerebbe andare per.