Appengine – Обновление со стандартного DB до NDB – ReferenceProperties

У меня есть приложение AppEngine, которое я рассматриваю для обновления базы данных NDB.

В моем приложении у меня есть миллионы объектов, которые имеют ссылки db старого стиля. Я хотел бы знать, каким будет лучший путь миграции, чтобы эти значения ReferenceProperty были преобразованы в значения KeyProperty или любое другое решение, которое позволило бы мне перейти на NDB.

(Я надеюсь на то, что не требует массивной пакетной обработки всех элементов в базе данных и вычисления KeyProperty на основе ReferenceProperty – что-то элегантное было бы неплохо)

Примеры моделей, которые я хотел бы обновить с db.Model до ndb.Model, следующие:

class UserModel(db.Model): .... class MailMessageModel(db.Model): m_text = db.TextProperty() m_from = db.ReferenceProperty(reference_class = UserModel) m_to = db.ReferenceProperty(reference_class = UserModel) 

One Solution collect form web for “Appengine – Обновление со стандартного DB до NDB – ReferenceProperties”

Хорошие новости, вам не нужно вносить какие-либо изменения в ваши сохраненные данные, так как ext.db и ext.db читают и записывают одни и те же данные.

Вот цитата из Cheat Sheet NDB :

Никаких изменений в хранилище данных не требуется!

Если вы задавались вопросом, несмотря на различные API, NDB и старый пакет ext.db записывают точно такие же данные в Datastore. Это означает, что вам не нужно делать какое-либо преобразование в хранилище данных, и вы можете с радостью смешивать и сопоставлять NDB и код ext.db, если используемая вами схема эквивалентна. Вы можете даже преобразовать между клавишами ext.db и NDB, используя ndb.Key.from_old_key () и key.to_old_key () .

Чит-лист – отличное руководство для преобразования определений вашей модели. Например, изменение MailMessageModel должно быть таким простым, как:

до:

 class MailMessage(db.Model): m_text = db.TextProperty() m_from = db.ReferenceProperty(reference_class=UserModel) m_to = db.ReferenceProperty(reference_class=UserModel) 

после:

 class MailMessage(ndb.Model): m_text = ndb.TextProperty() m_from = ndb.KeyProperty(kind=UserModel) m_to = ndb.KeyProperty(kind=UserModel) 

Я настоятельно рекомендую использовать чит-лист, чтобы помочь вам с вашей миграцией.

  • Как добавить auth_id с помощью webapp2?
  • AppEngine id / key / from_path довольно запутанно, что я должен использовать
  • Миграция данных при изменении типа свойства поля NDB
  • Передача данных между страницами в функции redirect () в Google App Engine
  • Как написать веб-службу для Google App Engine?
  • Использование PIL для рисования изображения в App Engine
  • Сообщение об исключении AttributeError при использовании manage.py в django-нереле для механизма приложений Google
  • Python: почему этот код берется навсегда (бесконечный цикл?)
  • Python - лучший язык программирования в мире.