sql >> Databáze >  >> RDS >> Oracle

cx_Oracle:Jak mohu iterovat sadu výsledků?

Kanonickým způsobem je použití vestavěného kurzorového iterátoru.

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

Můžete použít fetchall() získat všechny řádky najednou.

for row in curs.fetchall():
    print row

To může být praktické použít k vytvoření seznamu Pythonu obsahujícího vrácené hodnoty:

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

To může být užitečné pro menší sady výsledků, ale pokud je sada výsledků velká, může to mít špatné vedlejší účinky.

  • Musíte počkat, až se celá sada výsledků vrátí vašemu klientskému procesu.

  • Můžete sníst spoustu paměti ve vašem klientovi, abyste udrželi sestavený seznam.

  • Může chvíli trvat, než Python sestaví a dekonstruuje seznam, který stejně okamžitě zahodíte.

Pokud víte, že se v sadě výsledků vrací jeden řádek, můžete zavolat fetchone() získat jeden řádek.

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

Nakonec můžete opakovat sadu výsledků a načítat jeden řádek po druhém. Obecně to nemá žádnou zvláštní výhodu oproti použití iterátoru.

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


  1. MySQL InnoDB zamyká spojené řádky

  2. Mysql vybrat odlišné

  3. PostgreSQL:Porovnání řetězců bez ohledu na velikost písmen

  4. Vygenerujte pořadové číslo ve výběru