【发布时间】:2013-08-23 13:49:23
【问题描述】:
我正在尝试将文件保存为 MySQL 数据库中的 BLOB。 数据库现在非常简单,一个具有一列“文件”作为 longblob 类型的表。
代码如下:
file = open("file.txt","r")
data = file.readlines()
dp = pickle.dumps(data,1)
sql = "insert into Files values (%s)"
cursor.execute(sql,(MySQLdb.escape_string(dp),))
这似乎可以正常上传,但是在检索数据时,我在尝试取消腌制时收到 EOFError。如果我在完全不进行酸洗的情况下尝试该过程,则字符串不会被转义,并且在写回文件时转义字符会留在字符串中(除非我在那里缺少一个 python 步骤来进行转义/重新转义)。
sql = "select File from Files"
cursor.execute(sql)
ret = cursor.fetchone()
pickle.loads(ret[0])
EOFError exception
【问题讨论】:
-
为什么你用
pickle.loads(data[0])再次加载data而不是你存储在你的MySQL 数据库中的文件并且你用 cursor.fetchone() 请求?我预计会看到类似pickle.loads(ret.file)的东西,你没有吗? -
你考虑过用oursql代替吗?
-
修正了“数据”的错字。这个时候就得用MySQL了
-
这是“不,我什至都懒得看那是什么”吗?
-
对于
pickle.loads(ret.file),cursor.fetchone()返回一个元组,其中第一项是字符串。
标签: python mysql blob mysql-python