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) 

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

  • Фоновые задания на appengine
  • Google App Engine - Datastore get_or_insert key_name путаница
  • Ошибка urllib в Google App Engine и питоне. getaddrinfo не удалось
  • Отладка Jinja2 в Google App Engine
  • Получение URL-адреса сервера в Google App Engine с использованием python
  • Как анализировать xml в Python в Google App Engine
  • Как обрабатывать конфиденциальную конфигурационную информацию при развертывании приложений для приложений?
  • Очистите веб-страницу, которая требует, чтобы они сначала открывали сессионный файл cookie
  • Python - лучший язык программирования в мире.