от
Есть несколько способов, чтобы выполнить итерации через набор результатов. Каковы соотношения каждого?

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

4 Ответы

0 голосов
от
Есть несколько способов, чтобы выполнить итерации через набор результатов. Каковы соотношения каждого?
0 голосов
от
Канонический способ-использовать встроенный итератор курсор.
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()
0 голосов
от
Мой любимый способ-это итератор курсор, но установив свойство параметр arraysize курсора.
curs.execute('select * from people')
curs.arraysize = 256
for row in curs:
    print row
В этом примере, cx_Oracle будет выбирать строки из Oracle 256 строк за один раз, сокращая число обходов сети, которые должны быть выполнены
0 голосов
от
Там же, кстати
psyco, кажется, сделать это... из чего я делаю вывод, кажется, чтобы создать словарь, как строки-прокси карта ключ поиска в блоке памяти, возвращаемых запросом. В этом случае, выборка и весь ответ и работать с подобной доверенности-завод по строкам кажется полезной идеей. Приходите хотя думаю, это больше похоже на Lua, чем на Python.

Кроме того, это должно быть применимо ко всем Пеп-249 DBAPI2.0 интерфейсы, не только Oracle, или ты имел в виду просто быстро с помощью Oracle?
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...