我有一个以 LONGBLOB 数据类型作为列之一的 mysql 表。我想将 PDF 插入该列。我试过这个。
file = open(r'path to file\myfile.pdf', 'rb').read()
id='2'
q1 = QSqlQuery("INSERT INTO table_1 (id_val,pdf_name) VALUES (%s,%s)"%(id,file))
此代码没有将 id_val 和 PDF 插入表中,也没有显示任何错误。然后我拆分代码。
file = open(r'path to file\myfile.pdf', 'rb').read()
id='2'
q1 = QSqlQuery("INSERT INTO table_1 (id_val) VALUES (%s)"%(id))
q2 = QSqlQuery("UPDATE table_1 SET pdf_name=%s WHERE id_val='2'"%(file))
此代码将 id_val 插入到表中但不更新 BLOB pdf。
有人可以帮忙吗?
最佳答案
失败是因为文件内容本质上是二进制的,而 sql 命令将它与文本数据连接起来。
为了实现这一点,必须对数据进行编码,以便它可以在不触发 MySQL 的命令解析器的情况下执行命令。
一种方法是对内容进行 base64
编码,使其映射到 ascii 字符集。
import base64
with open('path to your pdf', 'rb) as f:
blob = base64.b64encode(f.read())
现在将这个 blob 插入到您的数据库中。
另一种更标准的方法是遵循 [1] 中的建议并使用 `MySQLdb.escape_string'。
[1] http://flylib.com/books/en/2.785.1.163/1/
PS:我没有测试过。
关于python - 使用 python 在 mySQL BLOB 中插入和检索 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37223903/