Совместимость NDB JsonProperty и библиотеки Cloud Datastore

У меня есть код, работающий в Standar GAE с использованием NDB, и код, работающий в гибком окружении с использованием библиотеки хранилища данных Google Cloud. Оба имеют доступ к одним и тем же объектам.

У меня проблемы с ndb.JsonProperty. Насколько я читал, эти свойства хранятся как blob, поэтому я попытался смоделировать это свойство с помощью облачной библиотеки. Перед сохранением значения я делаю следующее:

value_to_store = json.dumps(value, separators=[',',':'])
value_to_store = base64.b64encode(value_to_store)

И наоборот, когда я читаю свойство:

read_value = base64.b64decode(from_db_value)
read_value = json.loads(read_value)

В таких ситуациях все работает нормально:

Insert using NDB ---> Read using Cloud Library
Insert using Cloud Library ---> Read using Cloud Library

Но терпит неудачу, когда:

Insert using Cloud Library --> Read using NDB

Как правильно хранить такие свойства, чтобы они были совместимы с NDB?

Спасибо.


comment
Хорошо, похоже, что значение, вставленное с помощью Cloud Library, сохраняется как String, а значение, вставленное с помощью NDB, является Blob. Поэтому мне просто нужно выяснить, как сохранить значение как Blob с помощью библиотеки облачного хранилища данных.   -  person Curro    schedule 28.09.2017


Ответы (1)


Наконец я нашел решение.

Дело в том, что NDB хранит значение как blob, а библиотека хранит как строку.

Решение состоит в том, чтобы просто не кодировать / декодировать строковое значение, библиотека сделает это и сохранит значение как blob, это то, что ожидает NDB.

Пишу:

value_to_store = json.dumps(value, separators=[',',':'])

Чтение:

read_value = json.loads(read_value)

Легкий!

person Curro    schedule 28.09.2017