在App Engine for Python中,是否可以使用嵌套在其中的另一个对象来持久化一个类?

时间:2011-07-19 20:18:18

标签: python google-app-engine nested datastore

在App Engine for Python中,是否有类似Objectify(Java Library)的内容,我可以轻松地将一个类嵌入到另一个类中并将其保存到数据存储区中?

此类的建模方式类似于以下示例,其中Venue包含Location对象。我希望将其作为一个嵌套对象持久化,并且能够通过嵌入对象中的字段进行查询。

班级位置():
city = db.StringProperty()
state = db.StringProperty()

类Venue(db.Model):
name = db.StringProperty()
location =位置()

以下是有关如何在App Engine for Java中使用Objectify的信息 http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#@Embedded

这可以使用Python吗?

2 个答案:

答案 0 :(得分:3)

考虑使用Reference属性。即将Location对象存储为自己的实体,并通过引用将该位置合并到Venue对象中。

class Location():
  city = db.StringProperty()
  state = db.StringProperty()

class Venue(db.Model):
  name = db.StringProperty()
  location = db.ReferenceProperty(Location)

然后,如果您想同时在Location和Venue上进行交易,请使用数据存储区事务。

编辑:要查询“包含”对象中的字段,请使用数据存储“后引用”。即Venue包含对Location的引用这一事实意味着Location还包含对场地的引用。请参阅:http://code.google.com/appengine/docs/python/datastore/datamodeling.html#References

答案 1 :(得分:2)

目前还没有,但是NDB library支持将模型序列化为协议缓冲区,或者通过嵌套它们的属性(Objectify方式)来互相嵌入模型。