2

我试图保存对象到云存储,对象包含一个字典作为一个属性值:有没有办法在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自动完成的。

我想你可以通过包含设置为'bar'一个子属性(foo)领域(prop1)设置为datastore.Entity做到这一点。

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-node创建子实体时,它不会创建新类型,为什么它只是gcloud-python中的唯一方法?避免为像gcloud-node这样的嵌入式实体创建一种新的类型会很好。 –

+3

我同意 - 任何对gcloud-python提出问题的兴趣,以便那里的人可以开始工作? –

相关问题