Python MySQL 在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 个回答
1
根据这个回答中的评论,提问者有一个包含多个列表的列表,作为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
你需要为你的列表选择一种数据格式,我个人比较喜欢的常见解决方案如下:
json
-- 速度快,易读,支持嵌套数据。如果你的表格将来会被其他系统使用,这种格式非常有用。它会检查数据是否是有效的格式。使用json.dumps()
和json.loads()
可以在字符串和数据之间转换。repr()
-- 速度快,易读,适用于不同版本的Python。如果有人进入你的数据库,这种方式不太安全。使用repr()
和eval()
可以在字符串和数据之间转换。pickle
-- 速度快,但不易读,可能在不同的计算机架构上无法使用(据我所知)。它不会检查数据是否被截断。使用cPickle.dumps(..., protocol=(cPickle.HIGHEST_PROTOCOL))
和cPickle.loads(...)
可以转换你的数据。