在Python的App Engine中,能否持久化嵌套对象的类?

3 投票
2 回答
862 浏览
提问于 2025-04-16 21:52

在Python的App Engine中,有没有类似于Objectify(Java库)的东西,可以让我轻松地把一个类嵌套在另一个类里面,并把它保存到数据存储中?

这个类的结构就像下面这个例子,其中一个场所(Venue)包含一个位置(Location)对象。我想把它作为一个嵌套对象保存,同时也能根据嵌套对象中的字段进行查询。

class Location():
  城市 = db.StringProperty()
  州 = db.StringProperty()

class Venue(db.Model):
  名称 = db.StringProperty()
  位置 = Location()

这里有关于在Java的App Engine中Objectify如何工作的相关信息。
http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#@Embedded

用Python实现这个功能可以吗?

2 个回答

3

可以考虑使用引用属性。也就是说,把一个地点(Location)对象单独存储,然后通过引用的方式把这个地点放进场馆(Venue)对象里。

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

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

这样,如果你想同时对地点和场馆进行操作,可以使用数据存储事务。

补充说明:如果你想查询“包含”对象中的字段,可以使用数据存储的“反向引用”。也就是说,场馆包含对地点的引用,这也意味着地点会包含对场馆的引用。详细信息请查看:http://code.google.com/appengine/docs/python/datastore/datamodeling.html#References

2

现在还不支持,不过NDB库可以让模型互相嵌套。你可以通过将它们转换成一种叫做协议缓冲区的格式,或者像Objectify那样把它们的属性嵌套在一起。

撰写回答