SQLAlchemy и max_allowed_packet проблема

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

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



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

1
задан dpq 16 July 2010 в 17:54
поделиться

1 ответ

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

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

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

2
ответ дан 2 September 2019 в 23:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: