![Python MySQL 写入 longblob](https://linux22.com/image/1591967/Python%20MySQL%20%E5%86%99%E5%85%A5%20longblob.png)
你好,我在 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 中才存在的错误,或者这个问题是否仍然存在于最新版本中。