Python MySQL 写入 longblob

Python MySQL 写入 longblob

你好,我在 Python 3.6 和 MySQL 5.5.62 下使用 Python 连接器 8.0.13。在 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 MB 的数据运行正常,但对于例如 200 MB 的数据(如上面的错误),服务器就会关闭。

如果你们中有人知道如何解决这个问题我将非常感激。

答案1

好的,经过一些时间的努力后,我找到了一个可行的解决方案。

关键词是:LOAD_FILE()

此功能能够从任何类型的文件加载数据。但是要上传的文件必须存在于主机服务器上。(请注意 secure_file_priv)。

语法看起来有点像这样:

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

请注意,至少在 Windows 中,斜线需要向前 (/)。此外,如果未插入文件,load_file() 似乎不会引发错误。

到目前为止,我使用 400 MB 文件进行了测试,没有遇到任何问题。此外,以常规方式选择和获取数据也没有问题。

这更像是一种解决方法。我仍然愿意寻求更好的解决方案。我还想知道这是否是 5.5 中才存在的错误,或者这个问题是否仍然存在于最新版本中。

相关内容