sql >> Databasteknik >  >> RDS >> Oracle

cx_Oracle:Hur itererar jag över en resultatuppsättning?

Det kanoniska sättet är att använda den inbyggda marköriteratorn.

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

Du kan använda fetchall() för att få alla rader på en gång.

for row in curs.fetchall():
    print row

Det kan vara bekvämt att använda detta för att skapa en Python-lista som innehåller värdena som returneras:

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

Detta kan vara användbart för mindre resultatuppsättningar, men kan ha dåliga biverkningar om resultatuppsättningen är stor.

  • Du måste vänta på att hela resultatuppsättningen ska returneras till din klientprocess.

  • Du kan äta upp mycket minne i din klient för att hålla den uppbyggda listan.

  • Det kan ta ett tag för Python att konstruera och dekonstruera listan som du ändå omedelbart kommer att kassera.

Om du vet att det finns en enda rad som returneras i resultatuppsättningen kan du anropa fetchone() för att få den enda raden.

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

Slutligen kan du gå över resultatuppsättningen och hämta en rad i taget. I allmänhet finns det ingen speciell fördel med att göra detta framför att använda iteratorn.

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


  1. Prestandajämförelse mellan sql SELECT NULL och SELECT 1

  2. Någon har hackat min databas – hur?

  3. Hur använder man Oracles datapumpexportverktyg för att skapa en dumpfil på en lokal maskin?

  4. bygga Rollbaserad applikation