cx_Oracle: Как я выполняю итерации по набору результатов?

Я думаю, вы можете проанализировать to_datetime с параметром errors='coerce', а затем использовать strftime для перевода в дня недели с полным именем языкового стандарта :

print df
              TRX_DATE  some value
0  2010-08-15 13:00:00      27.065
1  2010-08-16 13:10:00      25.610
2  2010-08-17 02:30:00      17.000
3  2010-06-18 02:40:00      17.015
4  2010-18-19 02:50:00      16.910

df['TRX_DATE'] = pd.to_datetime(df['TRX_DATE'],errors='coerce')

df['day_type'] = df['TRX_DATE'].dt.strftime('%A')
print df
             TRX_DATE  some value day_type
0 2010-08-15 13:00:00      27.065   Sunday
1 2010-08-16 13:10:00      25.610   Monday
2 2010-08-17 02:30:00      17.000  Tuesday
3 2010-06-18 02:40:00      17.015   Friday
4                 NaT      16.910      NaT

43
задан Mark Harrison 14 October 2016 в 18:15
поделиться

3 ответа

Канонический путь состоит в том, чтобы использовать встроенный итератор курсора.

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()
43
ответ дан Mark Harrison 26 November 2019 в 22:56
поделиться

Моим предпочтительным путем является итератор курсора, но установка сначала arraysize свойства курсора.

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

В этом примере, cx_Oracle выберет строки от Oracle 256 строк за один раз, сокращая количество сетевых распространений в прямом и обратном направлениях, которые должны быть выполнены

24
ответ дан Aurelio Martin Massoni 26 November 2019 в 22:56
поделиться

Существует также путь psyco-pg, кажется, делает это... Из того, что я собираюсь, это, кажется, создает подобные словарю прокси строки для отображения ключевого поиска в блок памяти, возвращенный запросом. В этом случае выборка целого ответа и работа с подобной фабрикой прокси по строкам походят на полезную идею. Задумайтесь о нем, хотя, это чувствует больше как Lua, чем Python.

кроме того, это должно быть применимо ко всему интерфейсы PEP-249 DBAPI2.0, не только Oracle, или Вы имели в виду всего самый быстрый использование Oracle?

6
ответ дан Anders Eurenius 26 November 2019 в 22:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: