Это немного зависит от того, как вы хотите, чтобы ваше приложение работало, но вы можете сделать нечто подобное, используя Клиент 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
для импорта этой библиотеки.