使用appengine的数据存储框架,什么是使持久性成为{}的pythonic方法?
答案 0 :(得分:5)
如果您打算查询单个词典元素,则只需要使用expando选项。
假设您不想这样做,那么您可以使用自定义属性 -
class ObjectProperty(db.Property):
data_type = db.Blob
def get_value_for_datastore(self, model_instance):
value = self.__get__(model_instance, model_instance.__class__)
pickled_val = pickle.dumps(value)
if value is not None: return db.Blob(pickled_val)
def make_value_from_datastore(self, value):
if value is not None: return pickle.loads(str(value))
def default_value(self):
return copy.copy(self.default)
请注意,上面的属性def来自Nick Johnson制作的一些代码。它是project on git hub,包含许多其他自定义属性。
答案 1 :(得分:3)
您应该使用pickle.dumps存储它并使用pickle.loads
检索它答案 2 :(得分:2)
我认为有两种选择。
使用expando。只要省略保留字段,就可以存储任何内容:
class SomeModel(db.Expando):
pass
your_model = SomeModel()
for k, v in your_dict.iteritems():
setattr(your_model, k, v)
有可能使用your_model.__dict__.update(your_dict)
,但我不确定。
使用pickle
将其存储在文本字段中class SomeModel(db.Model):
pickled_data = db.BlobProperty()
your_model = SomeModel()
your_model.pickled_data = pickle.dumps(your_dict)