繁体   English   中英

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

[英]Python MySQL insert and retrieve a list in 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] 转换为列表?

根据此答案中的评论,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

您必须为您的列表选择一种数据格式,按照我的偏好顺序,常见的解决方案是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM