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

cx_Oracle:Hvordan itererer jeg over et resultatsæt?

Den kanoniske måde er at bruge den indbyggede cursor iterator.

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

Du kan bruge fetchall() for at få alle rækker på én gang.

for row in curs.fetchall():
    print row

Det kan være praktisk at bruge dette til at oprette en Python-liste, der indeholder de returnerede værdier:

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

Dette kan være nyttigt for mindre resultatsæt, men kan have dårlige bivirkninger, hvis resultatsættet er stort.

  • Du skal vente på, at hele resultatsættet bliver returneret til din klientproces.

  • Du spiser måske en masse hukommelse i din klient for at holde den opbyggede liste.

  • Det kan tage et stykke tid for Python at konstruere og dekonstruere listen, som du alligevel straks vil kassere.

Hvis du ved, at der er en enkelt række, der returneres i resultatsættet, kan du kalde fetchone() for at få den enkelte række.

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

Endelig kan du sløjfe over resultatsættet og hente en række ad gangen. Generelt er der ingen særlig fordel ved at gøre dette i forhold til at bruge iteratoren.

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


  1. Relationelt databasestyringssystem (RDBMS):MSSQL vs MySQL

  2. Hvad er forskellen mellem VARCHAR og CHAR?

  3. mySQL hierarkisk gruppering sortering

  4. Hvorfor skal jeg bruge OR NULL i MySQL, når jeg tæller rækker med en betingelse