Динамическое добавление свойств в сущность Google Datastore в App Engine Python (гибкая среда) - PullRequest
0 голосов
/ 09 января 2019

Задача

  • Я хочу добавить свойства в существующую сущность, например Expando Class .

Вопрос

  • Как динамически добавлять свойства в сущность Google Datastore в App Engine Python (гибкая среда).

Среда разработки

  • App Engine Python (Гибкая среда).
  • Python 3,6

Попробовал → Ошибка

С уважением,

1 Ответ

0 голосов
/ 09 января 2019

Это немного зависит от того, как вы хотите, чтобы ваше приложение работало, но вы можете сделать нечто подобное, используя Клиент Python для Google Cloud Datastore , который работает в Python3.X.

Например, вы можете обновить уже существующую сущность с помощью этой библиотеки, выполнив следующие действия:

from flask import Flask
from google.cloud import datastore


app = Flask(__name__)


@app.route('/')
def mainhandler():  
    client = datastore.Client()
    # Entity to update Kind and ID. Replace this values 
    # with ones that you know that exist.
    entity_kind = 'Foo-entity'
    entity_id = 123456789
    key = client.key(entity_kind, entity_id)

    entity = client.get(key)

    entity.update({
            "foo": u"bar",
            "year": 2019
        })
    client.put(entity)
    return "Entity updated"

Как видите, для обновления существующего объекта вам понадобится его вид и уникальный идентификатор (другого пути нет).

Однако вам не нужно делать это при создании сущности, и вы можете просто обновить его на ходу, как только он будет создан:

from flask import Flask
from google.cloud import datastore


app = Flask(__name__)


@app.route('/')
def mainhandler():  
    client = datastore.Client()
    entity_kind = 'Ticket-sale'
    key = client.key(entity_kind)

    ''' It is better to let Datastore create the Key 
    (unless you have some method to crate unique ID's), 
    so we call the allocate_ids method, and only keep the Key object'''
    key = client.allocate_ids(key, 1)[0]
    entity = datastore.Entity(key=key)
    entity.update({
            "foo": u"bar",
            "year": 20192
    })
    client.put(entity) # This creates the entity

    # update the entity once more with another property       
    entity.update({
            "month": u"January",
    })
    client.put(entity)
    return "Entity created"

Обратите внимание, что вам придется использовать литерал u"string", чтобы предупредить хранилище данных о том, что передаваемая строка кодируется в Unicode, в противном случае она будет отображаться как строка, состоящая из случайных символов, при доступе к значению свойства .

Также не забудьте обновить файл requirements.txt, добавив строку google-cloud-datastore для импорта этой библиотеки.

...