1

Python で google.cloud.datastore を使用してデータストア エンティティを作成または変更できましたが、ブラウザで Cloud Platform プロジェクトにログインしてエントリを確認すると、すべてのプロパティが暗号化されているように見えます (次のように見えます)。"Rm9vIEJhcg=="など - ブラウザから作成すると、正常に表示されます)。

サービス アカウント ID の 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 (生のバイト) として格納されるためです。コンソールには、Blob フィールドが Base64 形式で表示されます。値 Rm9vIEJhcg== を Base64 でデコードすると、Foo Bar になります。

私はPythonの知識があまりありませんが、公式ドキュメントの注を見てください:

エンティティをバックエンドに保存する場合、「テキスト」(Python2 では unicode、Python3 では str) の値は、UTF-8 にエンコードされた後、「text_value」フィールドを使用して保存されます。バックエンドから取得すると、そのような値は再び「テキスト」にデコードされます。「バイト」である値 (Python2 では str、Python3 ではバイト) は、「blob_value」フィールドを使用して、デコード/エンコードの手順なしで保存されます。

使用している Python のバージョンに応じて、データのデータ型を調整すると、問題が解決するはずです。

于 2016-10-19T13:27:29.567 に答える