2

我正在尝试将一个对象保存到 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 保存复合对象?

4

1 回答 1

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'}>}>
于 2016-06-28T13:51:12.083 回答