Может ли свойство объекта быть другим объектом в Google Cloud Datastore?

Вот что написано в документации:

Datastore mode supports a variety of data types for property values. These include, among others:

Integers

Floating-point

numbers

Strings

Dates

Binary data

Можно ли назначить объект другого типа в качестве свойства другого объекта в Google Cloud Datastore?

Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
1
0
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, вы хотите вложить одну сущность в другую сущность?

ORM Python ndb имеет нечто, называемое типом свойства ndb.StructuredProperty()

https://cloud.google.com/appengine/docs/standard/python/ndb/entity-property-reference#structured

class Address(ndb.Model):
    type = ndb.StringProperty()  # E.g., 'home', 'work'
    street = ndb.StringProperty()
    city = ndb.StringProperty()

class Contact(ndb.Model):
    name = ndb.StringProperty()
    addresses = ndb.StructuredProperty(Address, repeated=True)

guido = Contact(
    name='Guido',
    addresses=[
        Address(
            type='home',
            city='Amsterdam'),
        Address(
            type='work',
            street='Spear St',
            city='SF')])

Но это всего лишь трюк, который делает ORM. На самом деле он сохраняется как:

name = 'Guido'
addresses.type = ['home', 'work']
addresses.city = ['Amsterdam', 'SF']
addresses.street = [None, 'Spear St']

Массивы - это то, как хранятся повторяющиеся объекты: https://cloud.google.com/appengine/docs/standard/python/ndb/entity-property-reference#repeated

Обновлено:

Итак, я только что заметил от вас другой вопрос, что вы используете Python3, который использует эту библиотеку https://googleapis.github.io/google-cloud-python/latest/datastore/index.html

К сожалению, эта библиотека гораздо менее функциональна, чем ndb. Они работают над переносом ndb на python3, но он все еще находится в альфа-версии https://github.com/googleapis/python-ndb

Однако вы все равно можете попытаться сохранить его так же, как это делает ndb

from google.cloud import datastore
client = datastore.Client()
key = client.key('Contact', 1234)
entity = datastore.Entity(key=key)
entity.update({
    'name': Guido',
    'addresses.type': ['home', 'work'],
    'addresses.city' = ['Amsterdam', 'SF']
    'addresses.street' = [None, 'Spear St']
})

Единственная часть этого, в которой я не уверен в работе, - это отправка массивов для повторяющихся свойств.

Другие вопросы по теме