DISABILITARE ADBLOCK

ADBlock sta bloccando alcuni contenuti del sito

ADBlock errore
risultati trovati: 

DOMANDA

Esistono diversi modi per scorrere su un set di risultati. Quali sono i compromessi di ciascuno?

SOLUZIONE

Il modo canonico è usare l'iteratore del cursore incorporato.

curs.execute('select * from people')
for row in curs:
    print row

Puoi usare fetchall () per ottenere tutte le righe contemporaneamente.

for row in curs.fetchall():
    print row

Può essere conveniente usarlo per creare un elenco Python contenente i valori restituiti:

curs.execute('select first_name from people')
names = [row[0] for row in curs.fetchall()]

Questo può essere utile per set di risultati più piccoli, ma può avere effetti collaterali negativi se il set di risultati è grande.

  • Devi aspettare che venga restituito l'intero set di risultati processo client.

  • Puoi conservare molta memoria nel tuo client da conservare l'elenco incorporato.

  • Potrebbe essere necessario del tempo prima che Python costruisca e decostruisca il file elenco che eliminerai immediatamente comunque.


Se sai che viene restituita una singola riga nel set di risultati, puoi chiamare fetchone () per ottenere la riga singola.

curs.execute('select max(x) from t')
maxValue = curs.fetchone()[0]

Infine, puoi passare in rassegna il set di risultati recuperando una riga alla volta. In generale, non c'è alcun vantaggio particolare nel farlo rispetto all'uso dell'iteratore.

row = curs.fetchone()
while row:
    print row
    row = curs.fetchone()

Se ti va lasciaci una tua opinione

L'articolo ti è stato utile ed è tradotto correttamente?

ALTRI SUGGERIMENTI

Il mio modo preferito è l'iteratore del cursore, ma impostando prima la proprietà array del cursore.

curs.execute('select * from people')
curs.arraysize = 256
for row in curs:
    print row

In questo esempio, cx_Oracle recupererà le righe da Oracle 256 alla volta, riducendo il numero di round trip di rete che devono essere eseguiti

C'è anche il modo in cui psyco-pg sembra farlo ... Da quello che raccolgo, sembra creare proxy di riga simili a dizionario per mappare la ricerca delle chiavi nel blocco di memoria restituito dal query. In tal caso, recuperare l'intera risposta e lavorare con una proxy-factory simile sulle righe sembra un'idea utile. Vieni a pensarci, però, sembra più Lua che Python.

Inoltre, questo dovrebbe essere applicabile a tutti PEP-249 DBAPI2.0 interfacce, non solo Oracle, o intendevi solo più veloce usando Oracle ?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow