записать очищенный двоичный файл в блоб без предварительной записи его на диск - PullRequest
0 голосов
/ 03 апреля 2020

Я использую библиотеку requests для получения двоичного файла с веб-сайта. Теперь я хочу сохранить его в MySQL как BLOB. Я не хочу делать промежуточный шаг записи файла на диск. Каков наилучший способ сделать это?

В настоящее время я использую base64 для кодирования двоичного файла, чтобы MySQL принял его, как в это предложение . Это лучшая стратегия или есть способ, позволяющий мне пропустить кодировку (и последующее декодирование при извлечении файла)?

Минимальный пример:

import base64
import pymysql
import requests

myPDF = requests.get("https://arxiv.org/pdf/2004.00627.pdf")
myPDF_encoded = base64.b64encode(myPDF.content)
conn = pymysql.connect(
  host   = "127.0.0.1",
  user   = user,
  passwd = password,
  db     = "myDB")
cur = conn.cursor()

insertLine = "INSERT INTO myDB (PDF) VALUES (%s)"
cur.execute(insertLine, myPDF_encoded)
conn.commit()          

Множество сообщений говорить об общей проблеме записи двоичного файла в BLOB, но, насколько я могу судить, все начинается с предположения, что файл должен быть прочитан с диска.

1 Ответ

0 голосов
/ 03 апреля 2020

Гораздо лучшее решение для современных версий mySQL: пропустите кодировку base64 и используйте _binary %s для отправки двоичных данных, или просто добавьте параметр binary_prefix = True при настройке соединения py mysql. Например,

import pymysql
import requests

myPDF = requests.get("https://arxiv.org/pdf/2004.00627.pdf")
conn = pymysql.connect(
  host          = "127.0.0.1",
  user          = user,
  passwd        = password,
  db            = "myDB",
  binary_prefix = True)
cur = conn.cursor()

insertLine = "INSERT INTO myDB (PDF) VALUES (%s)"
cur.execute(insertLine, myPDF)
conn.commit()  
...