【问题标题】:Saving BLOBS in MySQL with Python使用 Python 在 MySQL 中保存 BLOBS
【发布时间】: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


【解决方案1】:

我不确定为什么腌制列表没有正确取消腌制,但我能够通过将 readlines 列表加入字符串并将其作为长文本类型上传到 MySQL 来解决此问题。

【讨论】:

    【解决方案2】:

    您不应同时使用 MySQLdb.escape_string 和参数样式 sql。 这些将起作用:

    1,

    sql = "insert into Files values (%s)"
    cursor.execute(sql,(dp,))
    

    2,

    sql = "insert into Files values ('{}')".format(MySQLdb.escape_string(dp))
    cursor.execute(sql)
    

    【讨论】:

      猜你喜欢
      • 2019-03-13
      • 2012-08-19
      • 1970-01-01
      • 2018-02-22
      • 2023-03-15
      • 2021-11-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      相关资源
      最近更新 更多