在python中从MySQL BLOB对象重构一个满是数据的类

在python中从MySQL BLOB对象重构一个满是数据的类,python,mysql,class,blob,cherrypy,Python,Mysql,Class,Blob,Cherrypy,我使用的是CherryPy,在从服务器上存储的文件检索数据时,它的表现似乎不太好。(我在这方面寻求帮助,但没有人回答,所以我开始计划B或C…)现在我在一个MySQL表中存储了一个包含大量数据结构(3个字典和两个相关列表)的类,令人惊讶的是,插入二进制对象(longblob)比我想象的要容易。我把它变成了一个pickle文件并插入了它 但是,我现在不知道如何重新构造pickle并从中重建满是数据的类。数据库返回一个看起来像pickle的巨大字符串,但是如何将字符串制作成类似文件的对象,以便pick

我使用的是CherryPy,在从服务器上存储的文件检索数据时,它的表现似乎不太好。(我在这方面寻求帮助,但没有人回答,所以我开始计划B或C…)现在我在一个MySQL表中存储了一个包含大量数据结构(3个字典和两个相关列表)的类,令人惊讶的是,插入二进制对象(longblob)比我想象的要容易。我把它变成了一个pickle文件并插入了它

但是,我现在不知道如何重新构造pickle并从中重建满是数据的类。数据库返回一个看起来像pickle的巨大字符串,但是如何将字符串制作成类似文件的对象,以便pickle.load(data)可以工作

替代解决方案:如何将类保存为数据库中的BLOB,或者了解为什么可以保存此类的pickle,但当我稍后加载它时,类似乎丢失了。但在SSH/Local中,它是有效的——只有在从cherrypy调用pickle.load(xxx)时,我才会收到错误


我准备好了D计划-如果有更好的方法来存储结构化数据集合,以便在没有pickle或MYSQL blob的情况下快速检索…

您可以创建一个类似于内存对象的文件,它具有:

但是对于pickle用法,您可以直接加载并转储到字符串(查看函数名中的s):

但对于存储在数据库中的结构化数据,我通常建议您使用

  • 一个表,最好使用类似ORM的格式,以便直接映射到类或
  • 字典,可以很容易地用JSON(反)序列化

而且根本不用泡菜。

我自己也在努力解决这个问题

使用UTF-8字符集转换为字节,并尝试在对象中加载数据

CurrentShoppingCart.SetCartItems(pickle.loads(bytes(DBCart[0]['Cart'], 'UTF-8')))

安德鲁

我来试试这个。我以前从未使用过“bytes”命令。一些新的东西需要阅读。我已经将我的结构转换为只有嵌套字典,没有类对象。我想知道文档中是否明确指出json/simplejson不能编码一类数据?@MarcMaxson你是什么意思?
>>> import pickle
>>> obj = 1
>>> serialized = pickle.dumps(obj)
>>> serialized
'I1\n.'
>>> pickle.loads(serialized)
1
CurrentShoppingCart.SetCartItems(pickle.loads(bytes(DBCart[0]['Cart'], 'UTF-8')))