Эффективный способ загрузки строк excel в базу данных?

У нас есть большие файлы excel (до 100 тыс. Строк с до 150 столбцами, около 30% столбцов, содержащих длинные текстовые объекты. Размер файла варьируется от 10 МБ до 60 МБ).

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

Я думал о загрузке каждого файла Excel с помощью xlrd , а затем создания инструкции INSERT для каждой строки Excel и выполнения моего SQL с помощью cx_Oracle.

Мои вопросы –

  1. Должен ли я создавать инструкцию INSERT для каждой отдельной строки, а затем выполнять ее (что означает много вызовов cursor.execute (sql)), или мне нужно иметь одну массивную строку со всеми моими вставками (разделенные точкой с запятой), что означает, что у меня есть только один вызов cursor.execute (sql)?

  2. Предполагая, что вся операция занимает много времени, есть ли вероятность, что я получу тайм-аут из базы данных? Я помню что-то подобное некоторое время назад, у меня был очень длинный запрос через cx_Oracle, и через несколько часов произошел тайм-аут, и связь была потеряна. Что можно сделать по этому поводу?

  3. Является ли концепция хорошей? Возможно, есть лучший способ реализовать это?

Благодаря!

Короткий ответ заключается в том, что вы должны использовать Cursor.prepare(statement[, tag]) и Cursor.executemany(statement, parameters) .

Подготовка заявления заблаговременно позволяет вам повторно переписывать один и тот же SQL INSERT снова и снова. Не делайте ни одной вставки в строке, она будет медленной.

Executmany делает много вложений одним махом.

Теперь есть два основных способа, которыми вы могли бы пойти: дозатор – это один из способов. Проблема с дозированием заключается в том, что вам нужно разработать пакетный подход, выбрать номер и так далее. Большие партии будут более эффективными, но вы должны учитывать компромисс между памятью (вы, вероятно, не можете вместить все сразу).

Другой подход – использовать генератор в python. То есть, создайте ленивый список, который генерируется по мере необходимости. Вы можете эффективно создавать список бесконечного размера, генерируя его как его потребляемый командой executemany .

Кроме того, прочитайте ответ на этот связанный вопрос о высокопроизводительных вставках с помощью python / oracle.

  • Как использовать ячейку Excel внутри SQL-запроса с помощью PowerShell?
  • экспортирует только строки из sql в phpmyadmin, только там, где определенный столбец имеет Boolean из 0
  • Как использовать if then statement на sql?
  • выбор и удаление запроса на основе более старых записей
  • Запрос столбца Excel между двумя датами с использованием C #
  • Таблица Excel для SQL с VB.net
  • Создайте последовательный номер (для каждой группы) при добавлении строки в таблицу Access
  • Выберите строку в запросе odbc
  • VBA Excel - SQL-запрос через ADO возвращает бесконечный нулевой набор записей
  • Обработка ошибок в QueryTables
  • Как я могу выбрать набор строк и столбцов из листа excel в запросе для C #?
  • Interesting Posts

    Запросить веб-сайт со значением из листа google, очистить данные с страницы результатов и импортировать данные на тот же лист

    как выбрать диапазон вставки автофильтра?

    C #: Excel date FromOADate переворачивает день и месяц

    Excel: отображение значения из списка параметров, если числа начинаются со значения из параметров

    Возьмите данные из txt-файла, проанализируйте его и поместите в CSV-файл

    Веб-автоматизация с использованием Excel VBA

    Настройка лучшего рабочего процесса в Excel

    Ошибка при попытке создать файл excel в C #

    Перемещение цветной ячейки

    excel vba копирует выбранный диапазон данных от нескольких листов до новой книги

    Excel extract vba – пробелы / форматирование

    Excel: проверьте, продает ли продавец определенный продукт

    Создание книги Excel через OLEDB без заголовков

    Программирование Excel для условного форматирования ячеек на основе определенных сроков действия (лист отслеживания)

    Excel VBA копирует ячейки из листа 1 и вставляет их в лист заголовка2

    Давайте будем гением компьютера.