Инициализация и изменение свойства ndb в google-apps-engine - PullRequest
0 голосов
/ 31 мая 2018

Я создал объект хранилища данных в соответствии с руководством по гостевой книге:

class myDS(ndb.Model):
    a = ndb.StringProperty(indexed=True)

И у меня есть обработчики для доступа к нему и обновление:

class Handler1:

    my_ds = myDS()
    my_ds.a = "abc" #Trying to update the value

class Handler2:
    my_ds = myDS()
    self.response.write(my_ds.a) #prints None although I changed the value in Handlers1

def main():
   application = webapp.WSGIApplication([
           ('/set',   Handler1),
           ('/get',   Handler2])

Я звоню:

Myapp.com/set 
Myapp.com/get : Prints None (Didn't update to "abc")

Почему не обновляется значение?Как я могу обновить через обработчики?

1 Ответ

0 голосов
/ 12 июня 2018

Cloud Datastore (GCD) хранит объекты данных как объекты , которые могут иметь одно или несколько свойств.В вашем случае тип значения свойства - это строка 'abc'.Однако каждая сущность идентифицируется ключом, который является уникальным идентификатором в хранилище данных вашего приложения.

Таким образом, в вашем случае вам необходимо создать ключ для объекта my_ds, а также определить класс модели.Это может быть Handler1 (например, class Handler1(ndb.Model): #your code), который определяет свойство, которое вы пытаетесь вызвать.

Кроме того, вы не можете ожидать обновления значения без использования функции put () (например, my_ds.put()).Чтобы использовать второй обработчик (Handler2) для создания нового объекта и установить значения свойств, вам нужно немного больше узнать об использовании обработчика запросов Webapp2 .

Я также предлагаю вам следовать этому руководству, чтобы начать .

...