Проблема SQLAlchemy и max_allowed_packet - PullRequest
1 голос
/ 16 июля 2010

В связи с характером моего приложения мне необходимо поддерживать быструю вставку больших объемов данных в базу данных. Использование executemany () повышает производительность, но есть предостережение. Например, MySQL имеет параметр конфигурации max_allowed_packet, и, если общий размер моих запросов на вставку превышает его значение, MySQL выдает ошибку.

Вопрос № 1 : Есть ли способ указать SQLAlchemy разбить пакет на несколько меньших?
Вопрос № 2 : Если другие RDBS имеют аналогичные ограничения, как мне их обойти?



* * 1012 P.S. Я разместил этот вопрос ранее, но удалил его, когда ошибочно предположил, что, скорее всего, я не столкнусь с этой проблемой в конце концов. К сожалению, это не так.

1 Ответ

2 голосов
/ 17 июля 2010

У меня недавно была похожая проблема, и я использовал - не очень элегантный - обходной путь:

  • Сначала я проанализировал my.cnf для значения max_allow_packets, если я не могу его найти, для максимума устанавливается значение по умолчанию.
  • Все элементы данных хранятся в списке.
  • Далее, для каждого элемента данных я подсчитываю приблизительную длину байта (для строк это длина строки в байтах, для других типов данных я беру максимальное количество байтов, которое использовалось для обеспечения безопасности).
  • Я складываю их, совершая после того, как достигну ок. 75% от max_allow_packets (так как запросы SQL также занимают место, просто чтобы быть в безопасности).

Этот подход не очень красив, но он работал для меня безупречно.

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