cx_Oracle: Ben bir sonucun üzerine yineleme nasıl ayarlanır?

oy
35

Bir sonuç kümesi üzerinde yineleme için çeşitli yollar vardır. her birinin takas nelerdir?

Oluştur 03/08/2008 saat 02:15
kaynak kullanıcı
Diğer dillerde...                            


3 cevaplar

oy
35

kurallı yolu yerleşik imleç yineleyici kullanmaktır.

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

Sen kullanabilirsiniz fetchall()seferde tüm satırları alır.

for row in curs.fetchall():
    print row

Iade değerleri içeren bir Python listesini oluşturmak için bu kullanmak daha uygun olabilir:

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

Bu daha küçük sonuç kümeleri için yararlı olabilir, ancak sonuç kümesi büyükse kötü yan etkileri olabilir.

  • Eğer müşteri sürecine geri ayarlı tüm sonucu beklemek gerekir.

  • Sen meskûn listesini tutmak için istemci çok fazla bellek harcayabilir.

  • Python inşa ve hemen her durumda atmak için gidiyoruz listeyi yapısızlaştırmak biraz zaman alabilir.


Eğer biliyorsanız çağırabilir sonuç kümesinde iade edilen tek bir satır var fetchone()tek satır olsun.

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

Son olarak, sonucun üzerine döngü her seferinde bir satır getirilirken şekilde ayarlayabilirsiniz. Genelde, yineleyici kullanarak üzerinden bu sayede özel bir avantaj var.

row = curs.fetchone()
while row:
    print row
    row = curs.fetchone()
Cevap 03/08/2008 saat 02:17
kaynak kullanıcı

oy
21

Benim tercih edilen yolu imleç yineleyici, ancak ilk imlecin arraysize özelliğini ayarlayarak.

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

Bu örnekte, cx_Oracle gerçekleştirilmesi gereken ağ yuvarlak gezi sayısını azaltarak, 256 satır bir anda Oracle satırları getir

Cevap 24/09/2008 saat 03:51
kaynak kullanıcı

oy
4

Yol bulunmaktadır psyco-pgbunu yapmak için ... ne toplamak, sorgu tarafından döndürülen bellek bloğuna anahtar arama haritaya sözlük benzeri satır-proxy oluşturmak gibi görünüyor itibaren görünüyor. Bu durumda, tüm cevap alma ve satırlar üzerinde benzer bir vekil-fabrikada çalışmak yararlı bir fikir gibi görünüyor. Daha Python daha Lua gibi hissediyor olsa düşünmek için gel.

Ayrıca, bu herkes için geçerli olmalıdır PEP-249 DBAPI2.0 arayüzleri, sadece Oracle, ya da sadece demek istedi hızlı kullanarak Oracle ?

Cevap 24/08/2008 saat 18:28
kaynak kullanıcı

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