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提出問題的興趣,以便那裏的人可以開始工作? –

相關問題