cx Oracle: jak iterować zestaw wyników?
Istnieje kilka sposobów iteracji zbioru wyników. Jaki jest kompromis każdego z nich?
3 answers
Kanonicznym sposobem jest użycie wbudowanego iteratora kursora.
curs.execute('select * from people')
for row in curs:
print row
Możesz użyć fetchall()
, aby uzyskać wszystkie wiersze naraz.
for row in curs.fetchall():
print row
Może być wygodne użycie tego do utworzenia listy Pythona zawierającej zwracane wartości:
curs.execute('select first_name from people')
names = [row[0] for row in curs.fetchall()]
Może to być przydatne dla mniejszych zestawów wyników, ale może mieć złe skutki uboczne, jeśli zestaw wyników jest duży.
Musisz poczekać aż cały zestaw wyników zostanie zwrócony do twój proces klienta.
Możesz jeść up a lot of memory in your client to hold lista Planetoid
Może trochę potrwać Budowa i dekonstrukcja Pythona lista, którą masz zamiar natychmiast odrzucić tak czy inaczej.
Jeśli wiesz, że w zestawie wynikowym jest zwracany pojedynczy wiersz, możesz wywołać fetchone()
, aby uzyskać pojedynczy wiersz.
curs.execute('select max(x) from t')
maxValue = curs.fetchone()[0]
Na koniec możesz zapętlić zestaw wynikowy pobierający jeden wiersz na raz. Ogólnie rzecz biorąc, nie ma szczególnej przewagi w robieniu tego nad używając iteratora.
row = curs.fetchone()
while row:
print row
row = curs.fetchone()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-15 20:47:11
Moim preferowanym sposobem jest iterator kursora, ale najpierw ustawienie właściwości arraysize kursora.
curs.execute('select * from people')
curs.arraysize = 256
for row in curs:
print row
W tym przykładzie cx_Oracle pobierze wiersze z 256 wierszy Oracle na raz, zmniejszając liczbę połączeń w obie strony sieci, które należy wykonaćWarning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-24 02:51:00
Jest też sposób psyco-pg
wydaje się to robić... Z tego, co wiem, wydaje się, że tworzy słownikowe proxy wierszowe, aby mapować wyszukiwanie kluczy do bloku pamięci zwracanego przez zapytanie. W takim przypadku pobranie całej odpowiedzi i praca z podobnym proxy-factory nad wierszami wydaje się przydatnym pomysłem. Jeśli o tym pomyśleć, to bardziej przypomina Lua niż pytona.
Również powinno to mieć zastosowanie do wszystkich Pep-249 DBAPI2.0 interfejsów, nie tylko Oracle, czy miałeś na myśli tylko najszybszy za pomocą Oracle ?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-24 17:28:26