将抓取的二进制文件写入 blob 而无需先将其写入磁盘
write scraped binary file to blob without first writing it to disk
我使用 requests
库从网站检索二进制文件。我现在想将它作为 BLOB 存储在 MySQL 中。我不想采取将文件写入磁盘的中间步骤。最好的方法是什么?
目前,我正在使用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 的一般问题,但据我所知,所有帖子都是从假设文件将从磁盘读取开始的。
现代版本 mySQL 的更好解决方案:跳过 base64 编码,使用 _binary %s
发送二进制数据,或者在设置 pymysql 连接时添加 binary_prefix = True
选项.例如,
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()
我使用 requests
库从网站检索二进制文件。我现在想将它作为 BLOB 存储在 MySQL 中。我不想采取将文件写入磁盘的中间步骤。最好的方法是什么?
目前,我正在使用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 的一般问题,但据我所知,所有帖子都是从假设文件将从磁盘读取开始的。
现代版本 mySQL 的更好解决方案:跳过 base64 编码,使用 _binary %s
发送二进制数据,或者在设置 pymysql 连接时添加 binary_prefix = True
选项.例如,
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()