如何在googleappengin上持久化python字典

2024-05-20 00:54:35 发布

您现在位置:Python中文网/ 问答频道 /正文

使用appengine的数据存储框架,pythonic的方法是什么使persistent成为{}?在


Tags: 数据方法框架pythonicpersistentappengine
3条回答

我认为有两种选择。在

  1. 使用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),但我不确定。

  2. 使用pickle将其存储在textfield中:

    class SomeModel(db.Model):
        pickled_data = db.BlobProperty()
    
    your_model = SomeModel()
    your_model.pickled_data = pickle.dumps(your_dict)
    

如果要查询单个字典元素,则只需要使用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,包含许多其他自定义属性。在

你应该用泡菜、垃圾然后用酸洗负荷在

看到了吗 http://docs.python.org/library/pickle.html

相关问题 更多 >