В App Engine для Python возможно ли сохранить класс с другим вложенным объектом? - PullRequest
3 голосов
/ 20 июля 2011

В App Engine для Python есть что-то вроде Objectify (Java Library), где я могу легко встроить класс в другой и сохранить его в хранилище данных?

Этот класс будет смоделирован, как в следующем примере, где Venue содержит объект Location. Я хочу сохранить это как один вложенный объект, а также иметь возможность выполнять запросы по полям во встроенном объекте.

Класс Расположение ():
city ​​= db.StringProperty ()
state = db.StringProperty ()

Место проведения (db.Model):
name = db.StringProperty ()
location = Местоположение ()

Вот информация о том, как это работает в Objectify в App Engine для Java.
http://code.google.com/p/objectify-appengine/wiki/IntroductionToObjectify#@Embedded

Возможно ли это с помощью Python?

Ответы [ 2 ]

3 голосов
/ 20 июля 2011

Рассмотрите возможность использования справочных свойств.Т.е. сохраните объект Location как свою собственную сущность и включите это местоположение в объект Venue по ссылке.

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

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

Затем, если вы хотите одновременно осуществлять операции с Location и Venue, используйте транзакции хранилища данных.

РЕДАКТИРОВАТЬ: Для запроса полей в «содержащий» объект, используйте хранилище данных «обратные ссылки».То есть тот факт, что Место содержит ссылку на Место, означает, что Местоположение также содержит ссылки на Места.Смотри: http://code.google.com/appengine/docs/python/datastore/datamodeling.html#References

2 голосов
/ 20 июля 2011

В настоящее время нет, но библиотека NDB поддерживает встраивание моделей друг в друга либо путем их сериализации в качестве буферов протокола, либо путем вложения их свойств (способ Objectify).

...