Форум сайта python.su
0
Всем привет. Вопрос. Можно ли на Python, при работе с базой данных, на пример MySQL открыть соединение (запрос) и частями обрабатывать данные из ответа, не дожидаясь, пока база данных передаст все данные?
НА пример у меня в базе есть 1 000 000 записей и я хочу передавать их в другое хранилище партиями по 1000 с помощью python приложения. Я открываю соеденение с базой и пересылаю запрос на получение всех данных, но не жду, когда Python получит все данные. Мне нужны только 1000. Я получаю их, формирую пакет и отсылаю в другое хранилище. После этого начинаю собирать следующий пакет. И держу соеденение с базой, пока не обработаю все 1 000 000 записей.
з.ы. вариант с limit в sql не подойдет, нужно решение на уровне языка. У меня на руках есть java приложение, которое так умеет, правда я пока еще в нем не копался, но убедился через mysql show list, что limit оно не использует, но при это не ждет полной загрузки всех данных (иначе оно не смогло бы так быстро начать передачу т.к. данных у меня порядка 1 терабайта)
Офлайн
75
bushart
а почему лимит плох? Квадратическое время поиска?
Если вы используете Mysqldb можно использовать Server Side Cursor
Отредактировано Singularity (Июнь 26, 2014 20:33:25)
Офлайн