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 中存在的錯誤,或者這個問題在最新版本中是否仍然存在。

相關內容