Oracle
 sql >> база данни >  >> RDS >> Oracle

cx_Oracle:Как да обходя набор от резултати?

Каноничният начин е да използвате вградения итератор на курсора.

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

Можете да използвате fetchall() за да получите всички редове наведнъж.

for row in curs.fetchall():
    print row

Може да е удобно да използвате това, за да създадете списък на Python, съдържащ върнатите стойности:

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

Това може да бъде полезно за по-малки набори от резултати, но може да има лоши странични ефекти, ако наборът от резултати е голям.

  • Трябва да изчакате целия набор от резултати да бъде върнат на вашия клиентски процес.

  • Може да изядете много памет във вашия клиент, за да задържите изградения списък.

  • Може да отнеме известно време на Python да конструира и деконструира списъка, който така или иначе веднага ще отхвърлите.

Ако знаете, че в резултатния набор се връща един ред, можете да извикате fetchone() за да получите единичния ред.

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

И накрая, можете да преминете през набора от резултати, извличайки един ред наведнъж. По принцип няма особено предимство в това пред използването на итератора.

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изчисля стойност на колона в oracle 10g?

  2. Стойност или цифрова грешка във функция и не мога да открия къде съм сбъркал Oracle

  3. PL/SQL вложени цикли с курсори

  4. Препоръки за поддръжка на Oracle и SQL Server в едно и също приложение ASP.NET с NHibernate

  5. Как да изобразя дървовидна структура в хибернация с множество таблици?