使用python在mySQL BLOB中插入和检索PDF

时间:2016-05-14 07:27:02

标签: python mysql pyqt

我有一个带有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。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

它失败了,因为文件内容本质上是二进制的,并且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:我还没有测试过它们。

答案 1 :(得分:0)

我能够将PDF作为BLOB插入,但代码稍作修改。

file = open(r'path to file\file.pdf', 'rb').read()
id='2'
q1= 'INSERT INTO table_1(id_val,pdf_name) VALUES(%s,%s)'    
a1 = (id,file)
cursor=db.cursor()
cursor.execute(q1,a1)