Python MySQL在Blob中插入和检索列表

时间:2014-04-14 19:07:05

标签: python mysql string list blob

我正在尝试将元素列表插入MySQL数据库(进入Blob列)。这是我的代码的一个例子:

myList = [1345,22,3,4,5]
myListString = str(myList)
myQuery = 'INSERT INTO table (blobData) VALUES (%s)'
cursor.execute(query, myListString)

一切正常,我的列表存储在我的数据库中。但是,当我想要检索我的列表时,因为它现在是一个字符串,我不知道如何获得一个真正的整数列表而不是一个字符串。

例如,如果我现在这样做:

myQuery = 'SELECT blobData FROM db.table'
cursor.execute(myQuery)
myRetrievedList = cursor.fetch_all()
print myRetrievedList[0]

我会得到:

[

而不是:

1345

有没有办法将我的字符串[1345,22,3,4,5]转换成列表?

2 个答案:

答案 0 :(得分:0)

编辑,根据OP,他(她?)有一个列表作为blob字段输入。在这种情况下,JSON似乎是一种更好的方法。

import json
...
...
myRetrievedList = cursor.fetch_all()
jsonOfBlob = json.loads(myRetrievedList)
integerListOfLists = []
for oneList in jsonOfBlob:
  listOfInts = [int(x) for x in oneList]
  integerListOfLists.append(listOfInts)

return integerListOfLists #or print, or whatever

答案 1 :(得分:0)

您必须为您的列表选择一种数据格式,我喜欢的常见解决方案是:

  • json - 快速,可读,允许嵌套数据,如果您的表被任何其他系统使用,则非常有用。检查blob是否为有效格式。使用json.dumps()json.loads()转换为字符串/ blob表示
  • repr() - 快速,可读,适用于Python版本。如果有人进入您的数据库,则不安全。用户repr()eval()从string / blob格式获取数据
  • pickle - 快速,不可读,不适用于多种体系结构(afaik)。不检查blob是否被截断。使用cPickle.dumps(..., protocol=(cPickle.HIGHEST_PROTOCOL))cPickle.loads(...)转换您的数据。