cx_Oracle: W jaki sposób iteracyjne nad wyniku ustawić?

głosy
35

Istnieje kilka sposobów, aby iteracyjne nad zestawu wyników. Jakie są kompromis każdego?

Utwórz 03/08/2008 o 02:15
źródło użytkownik
W innych językach...                            


3 odpowiedzi

głosy
35

Kanoniczna sposobem jest użycie wbudowanego kursora iterator.

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

Można użyć fetchall(), aby uzyskać wszystkie wiersze naraz.

for row in curs.fetchall():
    print row

Może to być wygodne, aby to wykorzystać, aby utworzyć listę Pythona zawierający wartości zwróconych:

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ża.

  • Trzeba czekać na cały zestaw wyników zostać zwrócony do procesu klienta.

  • Możesz jeść dużo pamięci w kliencie trzymać listę zabudowane.

  • To może potrwać do Pythona do konstruowania i dekonstrukcji listy, które masz zamiar natychmiast odrzucić jakikolwiek.


Jeśli wiesz, że nie jest to jednorzędowe są zwracane w wyniku ustawić można zadzwonić fetchone(), aby uzyskać pojedynczy wiersz.

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

Wreszcie, można pętli nad zbioru wyniku pobierania jeden wiersz naraz. Ogólnie rzecz biorąc, nie ma szczególną zaletą w ten sposób nad użyciem iteratora.

row = curs.fetchone()
while row:
    print row
    row = curs.fetchone()
Odpowiedział 03/08/2008 o 02:17
źródło użytkownik

głosy
21

Mój preferowany sposób ustawiania pierwsza właściwość arraysize kursora jest iterator kursor, ale.

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

W tym przykładzie, cx_Oracle pobiera wiersze z Oracle 256 wierszy jednocześnie, zmniejszając liczbę sieci w obie, które muszą być przeprowadzone

Odpowiedział 24/09/2008 o 03:51
źródło użytkownik

głosy
4

Jest też droga psyco-pgwydaje się to zrobić ... Z czego wnoszę, wydaje się stworzenie słownika podobny wiersz proxy mapowania klawiszy odnośnika do bloku pamięci zwróconego przez zapytanie. W takim przypadku pobierania całą odpowiedź i pracuje z podobnym proxy fabryce nad rzędami wydaje się przydatny pomysł. Przyjdź, aby myśleć o tym jednak, że czuje się bardziej jak Lua niż Python.

Ponadto, powinno to mieć zastosowanie do wszystkich DBAPI2.0 PEP-249 interfejsów, nie tylko Oracle, lub nie masz na myśli właśnie najszybciej za pomocą Oracle ?

Odpowiedział 24/08/2008 o 18:28
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more