2015-07-01 3 views
0

Я извлекаю данные из Oracle db, используя pyodbc и pandas read_sql.Python pandas read_sql возвращает объект генератора

Я не вижу никаких ошибок, когда я вхожу эту линию

df = pd.read_sql(sql_str,cnxn,chunksize=10) 

Но когда я пытаюсь увидеть

df 

Я получаю эту ошибку

<generator object _query_iterator at 0x092D40F8> 

Мой поиск, в какой это ошибка или то, что может вызвать ее, не дало удовлетворительных ответов.

Причиной использования chunksize является то, что у меня есть таблицы БД Oracle с 60 миллионами строк, и планируют загрузить в битах, а затем положить их вместе, так же, как здесь: How to create a large pandas dataframe from an sql query without running out of memory?

+0

Чтобы быть конкретным, то, что вы видите, не является «ошибкой», он говорит, что объект 'df' является объектом-генератором. – joris

ответ

0

Я предпочел бы, чтобы комментировать, но пока не может. Независимо, это не ошибка, которая говорит вам, что df является объектом-генератором.

+0

Спасибо. Вы имеете в виду, что ошибка неинформативна? – David

+0

Как и в других ответах, вы можете перебрать объект генератора для получения конкретных точек данных. – gffbss

2

В качестве объяснения chunksize указано, что указано возвращает итератор, где chunksize - количество строк, которое должно быть включено в каждый кусок.
Таким образом, вы можете перебирать результат и сделать что-то с каждым блоком:

for chunk in pd.read_sql_query(sql_str, engine, chunksize=10): 
    do_something_with(chunk) 

Обычно вы можете обработать кусок и добавить его в список, а затем после этого для петли CONCAT всех обработанных кусков в этом списке вместе ,

Также см. Документы на sql-запросе: http://pandas.pydata.org/pandas-docs/stable/io.html#querying для примера.

Смежные вопросы