Создание записи в хранилище данных приводит к появлению зашифрованных свойств при просмотре в браузере
Мне удается создать или изменить сущность хранилища данных в порядке с google.cloud.datastore в python, но когда я захожу в свой проект 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, была читаемой с сайта браузера?
1 ответ
Значение на самом деле не зашифровано, скорее закодировано с Base64. Причиной этого является то, что значение хранится как Blob (необработанные байты) вместо Text/Character String. Консоль отображает поля BLOB-объектов в формате Base64. Значение, Rm9vIEJhcg==, когда декодируется с Base64, является Foo Bar.
Я не очень разбираюсь в Python, но взгляну на примечание из официальной документации:
При сохранении сущности во внутреннем интерфейсе значения, которые являются "текстовыми" (юникод в Python2, str в Python3), будут сохранены с использованием поля "text_value" после кодирования в UTF-8. При извлечении из серверной части такие значения будут снова декодированы в "текст". Значения, которые являются "байтами" (str в Python2, байты в Python3), будут сохранены с использованием поля "blob_value" без какого-либо шага декодирования / кодирования.
В зависимости от версии Python, которую вы используете, настройте тип данных для ваших данных, и проблема должна быть решена.