【发布时间】:2010-07-08 12:30:45
【问题描述】:
使用 appengine 的数据存储框架,将持久化为 {} 的 Python 方法是什么?
【问题讨论】:
标签: python dictionary persistence
使用 appengine 的数据存储框架,将持久化为 {} 的 Python 方法是什么?
【问题讨论】:
标签: python dictionary persistence
如果您打算查询单个字典元素,则只需要使用 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)
请注意,我从 Nick Johnson 生成的一些代码中获得了上述属性 def。它是一个project on git hub,并包含许多其他自定义属性。
【讨论】:
您应该使用 pickle.dumps 存储它并使用 pickle.loads 检索它
【讨论】:
我认为有两种选择。
使用扩展。只要省略保留字段,您就可以在其中存储任何内容:
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)
【讨论】: