2014-04-14 150 views
0

我试图将元素列表插入MySQL数据库(到Blob列中)。这是我的代码示例是:Python 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]列入清单?

回答

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 
+0

你的解决方案看起来不错,但我有一个小问题。我撒谎让问题看起来更容易,实际上我有一个列表清单。所以myList = [[1245,22,3,4,5] [1,2,3,4,5]]。那我该怎么办? – user3369214

0

你必须选择你的列表中的数据格式,在我的优先顺序常见的解决方案是:

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