sql >> Base de Datos >  >> RDS >> Oracle

cx_Oracle:¿Cómo itero sobre un conjunto de resultados?

La forma canónica es usar el iterador de cursor integrado.

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

Puedes usar fetchall() para obtener todas las filas a la vez.

for row in curs.fetchall():
    print row

Puede ser conveniente usar esto para crear una lista de Python que contenga los valores devueltos:

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

Esto puede ser útil para conjuntos de resultados más pequeños, pero puede tener efectos secundarios negativos si el conjunto de resultados es grande.

  • Debe esperar a que se devuelva el conjunto de resultados completo a su proceso de cliente.

  • Es posible que consuma mucha memoria en su cliente para mantener la lista construida.

  • Python puede tardar un tiempo en construir y deconstruir la lista que, de todos modos, descartará de inmediato.

Si sabe que se devuelve una sola fila en el conjunto de resultados, puede llamar a fetchone() para obtener la fila única.

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

Finalmente, puede recorrer el conjunto de resultados obteniendo una fila a la vez. En general, no hay una ventaja particular en hacer esto sobre el uso del iterador.

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