Python MySQL пишет longblob

Python MySQL пишет longblob

Здравствуйте, я использую Python connector 8.0.13 под Python 3.6 и MySQL 5.5.62. На Win 7

Я хочу записать большие данные Blob в свои таблицы. Проблема в том, что под Python запрос приводит к краху сервера с ошибкой:

C:\Program Files (x86)\MySQL\MySQL Server 5.5\bin\mysqld.exe: Недостаточно памяти (требуется 240225944 байт)

И

Ошибка: недостаточно памяти; проверьте, использует ли mysqld или какой-либо другой процесс всю доступную память; если нет, вам, возможно, придется использовать «ulimit», чтобы разрешить mysqld использовать больше памяти, или вы можете добавить больше пространства подкачки

Мой Ram, ни Swap не заполнены, когда это происходит. Странно то, что. Если я использую MySQL Workbench, данные вставляются.

Что я сделал на данный момент:

  • Увеличить innodb_buffer_pool_sizeдо 256M
  • Max_allowed_packetв 2G
  • Установите все настройки тайм-аута как минимум на 600 (также в mysql.connector.connect)

Вставка через Python выглядит примерно так:

command = 'INSERT into table (col1,Blob, col3,... ) Values(val1, %s, val3) on duplicate key update col1=val1, Blob = %s, col3=val3'
cursor.execute(command, [Blobdata, Blobdata])

Приведенный выше код работает без сбоев для данных объемом около 15–20 МБ, но, например, при объеме в 200 МБ (как в ошибке выше) сервер отключается.

Я был бы благодарен, если бы кто-нибудь из вас подсказал, как решить эту проблему.

решение1

Хорошо, повозившись некоторое время, я нашел работающее решение.

Ключевое слово:LOAD_FILE()

Эта функция может загружать данные из любого типа файла. Однако файл для загрузки должен присутствовать на хост-сервере. (помните о secure_file_priv).

Синтаксис выглядит примерно так:

INSERT INTO table (Blobcolumn) VALUES(load_file('full path' ))

Будьте осторожны, по крайней мере в Windows, слеши должны быть вперед (/). Также load_file(), похоже, не выдает ошибку, если файл не был вставлен.

Я пока тестировал с файлом 400 МБ без проблем. Также нет проблем с выбором и извлечением данных обычным способом.

Это больше похоже на обходной путь. Я все еще открыт для лучших решений. Я также хотел бы знать, является ли это ошибкой, которая присутствовала только в 5.5, или эта проблема все еще существует в последних версиях.

Связанный контент