Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

cx_Oracle:Como faço para iterar em um conjunto de resultados?


A maneira canônica é usar o iterador de cursor integrado.
curs.execute('select * from people')
for row in curs:
    print row

Você pode usar fetchall() para obter todas as linhas de uma vez.
for row in curs.fetchall():
    print row

Pode ser conveniente usar isso para criar uma lista Python contendo os valores retornados:
curs.execute('select first_name from people')
names = [row[0] for row in curs.fetchall()]

Isso pode ser útil para conjuntos de resultados menores, mas pode ter efeitos colaterais ruins se o conjunto de resultados for grande.

  • Você tem que esperar que todo o conjunto de resultados seja retornado ao seu processo cliente.

  • Você pode consumir muita memória em seu cliente para manter a lista construída.

  • Pode demorar um pouco para o Python construir e desconstruir a lista que você descartará imediatamente de qualquer maneira.

Se você sabe que há uma única linha sendo retornada no conjunto de resultados, você pode chamar fetchone() para obter a linha única.
curs.execute('select max(x) from t')
maxValue = curs.fetchone()[0]

Finalmente, você pode fazer um loop sobre o conjunto de resultados buscando uma linha de cada vez. Em geral, não há vantagem particular em fazer isso sobre o uso do iterador.
row = curs.fetchone()
while row:
    print row
    row = curs.fetchone()