我可以在 google 的 BigTable 数据存储中存储 python 字典而不显式序列化它吗?
我有一个 python 字典,我想将其存储在 Google 的 BigTable 数据存储中(它是 db.Model 类中的一个属性)。
有没有简单的方法可以做到这一点?即使用db.DictionaryProperty
?或者我必须使用 pickle 来序列化我的字典吗?我的字典比较简单。它由作为键的字符串组成,但它也可能包含某些键的子字典。例如:
{
'myKey' : 100,
'another' : 'aha',
'a sub dictionary' : { 'a': 1, 'b':2 }
}
PS:如果可能的话,我想序列化为二进制,而不是文本。
I have a python dictionary that I would like to store in Google's BigTable datastore (it is an attribute in a db.Model
class).
Is there an easy way to do this? i.e. using a db.DictionaryProperty
? Or do I have to use pickle to serialize my dictionary? My dictionary is relatively straight forward. It consists of strings as keys, but it may also contain sub dictionaries for some keys. For example:
{
'myKey' : 100,
'another' : 'aha',
'a sub dictionary' : { 'a': 1, 'b':2 }
}
PS: I would like to serialize as binary, not text if possible.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是另一种方法:
Here's another approach:
我认为你无法避免序列化你的对象。
我将定义以下模型来存储每个键、值对:
保存到我使用的数据存储:
并检索数据:
I think you cannot avoid serializing your objects.
I would define the following model to store each key, value pair:
To save to the datastore I'd use:
And to retrieve data:
我认为当你需要能够访问字典时,它是一次性的吗?当字典位于数据存储中时,您不必从字典内部获取值吗?
如果是这样,您将必须序列化,但不必使用 pickle;我们使用 simplejson 代替。然后检索是重写 toBasicType() 的简单问题,有点像这样:
class MyModel(db.Model):
#定义一些属性,包括“data”,它是一个包含大字典的 TextProperty
def toBasicType(self):
返回 {'元数据': self.getMetadata(),
'data': simplejson.loads(self.data)}
创建涉及调用 MyModel(...,simplejson.dumps(data),...)。
如果您已经在进行酸洗,这可能是您最好的选择,但 simplejson 对我们来说工作得很好。
I assume that when you need to be able to reach the dict, it's all-at-once? You don't have to get values from inside the dict while it's in the datastore?
If so, you'll have to serialize, but don't have to use pickle; we use simplejson instead. Then retrieving is a simple matter of overriding toBasicType(), sort of like this:
class MyModel(db.Model):
#define some properties, including "data" which is a TextProperty containing a biggish dict
def toBasicType(self):
return {'metadata': self.getMetadata(),
'data': simplejson.loads(self.data)}
Creation involves calling MyModel(...,simplejson.dumps(data),...).
If you're already pickling, that may be your best bet, but simplejson's working pretty well for us.