Панды read_sql_table никогда не разрешается - PullRequest
0 голосов
/ 14 декабря 2018

Я экспериментирую с SQL и Pandas.Следуя руководству для панд по sql запросам и соответствующему sqlalchemy руководству по спецификации двигателя

from sqlalchemy import create_engine
'''
example from sqlalchemy guide, engine_spec has the form of:

    dialect+driver://user:password@host:port/name

where leaving out "+driver" defaults to whatever the SQLAlchemy choose for dialect  
''' 

my_engine_spec = 'mysql://user:password@host:port/name'
engine = create_engine(my_engine_spec)

data = pd.read_sql_table(table_name, engine, chunksize=10)

Что следует отметить:

  • Я ограничиваю chunksize 10, и в таблице более 10 записей.Это для тестирования, чтобы убедиться, что код работает без ожидания дампа данных ... но тем не менее он не разрешает

  • Я использую mysql с драйвером по умолчанию, и я прошелболь установки его на macOS с python3 +

  • Я ждал более 5 минут, прежде чем завершить сценарий.

  • Я могу мгновенно просматривать данные, используя приложение визуализатора БД SQL (например, Sequel Pro) с теми же характеристиками, поэтому предположим, что переменная my_engine_spec верна.

Почему это занимает так много времени или даже не решается?как я могу ускорить его?

1 Ответ

0 голосов
/ 16 декабря 2018

Я ограничиваю размер фрагмента 10, и в таблице более 10 записей.

Панды читают всю таблицу в блоке, и каждый блок имеет 10 записей или меньше.Когда вы указали chunksize, что pandas.read_sql_table вернет генератор.

data = pd.read_sql_table(table_name, engine, chunksize=10)
[data.__next__() for _ in range(1)] # only read one chunk, 10 records or less

Я ждал более 5 минут, прежде чем завершить сценарий.

read_sql_table будетпрочитайте всю таблицу, все записи.Это означает, что если вы хотите использовать read_sql_table очень большую таблицу, а затем выбрать специальный столбец, вы потратите гораздо больше времени и памяти, по сравнению с завершением в mysql. Почему вы тратите так много времени, что связано с тем, что вы делали с помощью своего кода , если вы выполняете только то, что показывает ваш пример кода, оно должно быть быстрым (я пытался прочитать 0.5Mзаписи, но это стоит всего несколько секунд)

Почему это занимает так много времени или даже не решается?

Если вам не нужны все записи, используйтеread_sql или read_sql_query для запуска запросов.Потому что MySQL работает очень хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...