我正在使用CherryPy,在从服务器上的存储文件中检索数据时似乎表现不佳。 (我请求帮助,没有人回复,所以我正在计划B或C ......)现在我已经存储了一个包含一堆数据结构的类(3个字典和两个列表都列出来)一个MySQL表,令人惊讶的是,它比插入二进制对象(longblob)更容易。我把它变成了一个pickle文件并插入它。
然而,我无法弄清楚如何重建泡菜并重建现在充满数据的类。数据库返回一个看起来像pickle的巨型字符串,但是如何将字符串转换为类似文件的对象,以便pickle.load(data)可以工作?
替代解决方案:如何将类保存为数据库中的BLOB,或者为什么我可以保存这个类的pickle的一些想法,但是当我稍后加载它时,该类似乎丢失了。但在SSH /本地,它的工作原理 - 只有从cherrypy调用pickle.load(xxx)才会出错。
我想要计划D - 如果有更好的方法来存储结构化数据的集合,以便在没有泡菜或MYSQL blob的情况下快速检索...
答案 0 :(得分:0)
您可以使用(c)StringIO:
创建类似文件的内存中对象>>> from cStringIO import StringIO
>>> fobj = StringIO('file\ncontent')
>>> for line in fobj:
... print line
...
file
content
但是对于pickle用法,您可以直接加载并转储到字符串(查看函数名称中的 s ):
>>> import pickle
>>> obj = 1
>>> serialized = pickle.dumps(obj)
>>> serialized
'I1\n.'
>>> pickle.loads(serialized)
1
但对于存储在数据库中的结构化数据,我建议您使用
根本没有使用泡菜。
答案 1 :(得分:0)
我自己也在努力。
使用UTF-8字符集转换为字节,并尝试在对象中加载数据。
CurrentShoppingCart.SetCartItems(pickle.loads(bytes(DBCart[0]['Cart'], 'UTF-8')))
安德鲁