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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top