有没有办法在gcloud-python中保存嵌套实体?

时间:2016-06-27 11:07:33

标签: google-cloud-datastore gcloud-python google-cloud-python

我尝试将对象保存到Cloud Datastore,该对象包含字典作为属性值:

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:未知的protobuf attr类型

虽然我可以使用gcloud-node这样做。

是否可以使用gcloud-python保存复合对象?

1 个答案:

答案 0 :(得分: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'}>}>