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

0 投票
2 回答
2044 浏览
提问于 2025-04-18 02:43

我正在尝试把一个元素列表插入到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(...) 可以转换你的数据。

撰写回答