2

Я пытаюсь сохранить объект в облако Datastore, объект содержит словарь в качестве значения свойства:Есть ли способ сохранить вложенные объекты в gcloud-python?

client = datastore.Client(project_id) 
key = client.key('Config', 'config', 'Environment', 'env_name') 
env = datastore.entity.Entity(key) 
env['prop1'] = dict(foo='bar') 
client.put(env) 

но он поднимает

ValueError: Unknown protobuf attr type

Хотя я в состоянии сделать это, используя gcloud-узел.

Возможно ли сохранить составной объект с помощью gcloud-python?

ответ

4

Похоже, вы заинтересованы в хранении встроенного объекта, который, я считаю, является тем, что gcloud-node делает автоматически.

Я думаю, что вы можете сделать это путем установки поля (prop1) к datastore.Entity, содержащему вложенное свойству (foo) установлен в 'bar'.

client = datastore.Client(project_id) 
key = client.key('Config', 'config', 'Environment', 'env_name') 
env = datastore.Entity(key) 
env['prop1'] = datastore.Entity(key=client.key('EmbeddedKind') 
env['prop1']['foo'] = 'bar' 
client.put(env) 

Когда вы получите это обратно, это будет выглядеть ...

>>> c.get(env.key) 
<Entity[{'kind': u'Config', 'name': u'config'}, {'kind': u'Env', 'name': u'env_name'}] {u'prop1': <Entity[{'kind': u'Embedded'}] {u'foo': 'bar'}>}> 
+1

Спасибо за ответ! Когда я создаю суб-объект с gcloud-узлом, он не создает новый вид, почему это единственный способ в gcloud-python? было бы неплохо избежать создания нового типа для встроенного объекта, такого как gcloud-node. –

+3

Я согласен - любой интерес к подаче вопроса против gcloud-python, чтобы люди там могли работать над этим? –

Смежные вопросы