Oracle
 sql >> Database >  >> RDS >> Oracle

cx_Oracle:come faccio a scorrere un set di risultati?

Il modo canonico consiste nell'usare l'iteratore del cursore integrato.

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 attendere che l'intero set di risultati venga restituito al processo del tuo cliente.

  • Potresti consumare molta memoria nel tuo cliente per contenere l'elenco costruito.

  • Potrebbe volerci un po' prima che Python costruisca e decostruisca l'elenco che scarterai comunque immediatamente.

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

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

Infine, puoi scorrere il set di risultati recuperando una riga alla volta. In generale, non c'è alcun vantaggio particolare nell'usare l'iteratore.

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