我试图保存一个对象到云数据存储,该对象包含一个字典作为属性值:
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-node。
是否可以使用gcloud-python保存复合对象?
听起来您对存储嵌入式实体很感兴趣,我相信gcloud-node会自动做到这一点。
我认为您可以通过将字段(prop1
)设置为包含子属性(foo
)设置为'bar'
的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'}>}>