Oracle
 sql >> Datenbank >  >> RDS >> Oracle

cx_Oracle:Wie iteriere ich über eine Ergebnismenge?

Der kanonische Weg ist, den eingebauten Cursor-Iterator zu verwenden.

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

Sie können fetchall() verwenden um alle Zeilen auf einmal zu bekommen.

for row in curs.fetchall():
    print row

Es kann praktisch sein, dies zu verwenden, um eine Python-Liste mit den zurückgegebenen Werten zu erstellen:

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

Dies kann für kleinere Ergebnismengen nützlich sein, kann aber negative Nebeneffekte haben, wenn die Ergebnismenge groß ist.

  • Sie müssen warten, bis die gesamte Ergebnismenge an Ihren Client-Prozess zurückgegeben wird.

  • Sie können viel Speicher in Ihrem Client verbrauchen, um die aufgebaute Liste zu speichern.

  • Es kann eine Weile dauern, bis Python die Liste erstellt und dekonstruiert, die Sie sowieso sofort verwerfen werden.

Wenn Sie wissen, dass in der Ergebnismenge eine einzelne Zeile zurückgegeben wird, können Sie fetchone() aufrufen um die einzelne Zeile zu erhalten.

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

Schließlich können Sie die Ergebnismenge durchlaufen, indem Sie jeweils eine Zeile abrufen. Im Allgemeinen hat dies keinen besonderen Vorteil gegenüber der Verwendung des Iterators.

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