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) 

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

  • Разбор заголовка HTTP-запроса с помощью Python
  • google-app-engine: ImportError httplib2 в google api python client hello world
  • Ошибка Google App Engine и 404
  • HttpError 400 при попытке загрузить файл PDF в облачном хранилище Google
  • Jinja2 в Google App Engine
  • Невозможно импортировать модули, которые есть
  • ndb и последовательность: почему происходит такое поведение в запросе без родителя
  • Аутентифицированный, но user.is_authenticated остается ложным
  • Python - лучший язык программирования в мире.