1

我设法在 python 中使用 google.cloud.datastore 很好地创建或修改了数据存储实体,但是当我在浏览器中登录到我的 Cloud Platform 项目并检查条目时,看起来它的所有属性都已加密(它们看起来像"Rm9vIEJhcg=="等等 - 如果我从浏览器创建它,我可以正常看到)。

我正在使用服务帐户身份的 json 文件进行身份验证:

self.client = datastore.Client()
self.client = self.client.from_service_account_json(cert_file.json)

服务帐户对整个项目具有“编辑”权限。将其更改为“所有者”,这是我用来登录的 gmail 帐户的设置,并不能解决问题。

我创建这样的实体:

with self.datastore.client.transaction():
    entity = Entity(Key("key", project="project"))
    entity["property"] = "data"
    self.datastore.client.put(entity)

有什么方法可以使我使用 python 库修改的条目可以从浏览器站点读取?

4

1 回答 1

5

该值并未真正加密,而是使用 Base64 编码。原因是该值存储为 Blob(原始字节),而不是文本/字符字符串。控制台以 Base64 格式显示 Blob 字段。使用 Base64 解码时,值 Rm9vIEJhcg== 为 Foo Bar。

我对 Python 的了解不多,但是看看官方文档中的注释:

将实体保存到后端时,“text”值(Python2 中的 unicode,Python3 中的 str)将在编码为 UTF-8 后使用“text_value”字段保存。当从后端检索时,这些值将再次被解码为“文本”。“字节”值(Python2 中的 str,Python3 中的字节)将使用“blob_value”字段保存,无需任何解码/编码步骤。

根据您使用的 Python 版本,调整数据的数据类型,问题应该会得到解决。

于 2016-10-19T13:27:29.567 回答