Сериализация ключа сущности для строки в Python для GAE - PullRequest
5 голосов
/ 29 апреля 2011

В низкоуровневом API Java есть способ превратить ключ объекта в строку, чтобы вы могли передать его клиенту через JSON, если хотите.Есть ли способ сделать это для Python?

Ответы [ 4 ]

3 голосов
/ 29 апреля 2011

str(entity.key()) вернет представление ключа в кодировке base64.

entity.key().name() или entity.key().id() вернет только имя или идентификатор, исключая вид и родословную.

3 голосов
/ 29 апреля 2011

В зависимости от того, используете ли вы имена ключей или нет, obj.key().name() или obj.key().id() могут использоваться для получения имени ключа или идентификатора, соответственно. Ни один из них не содержит имени класса сущности, поэтому их недостаточно для извлечения исходного объекта из хранилища данных. Конечно, в большинстве случаев вы обычно знаете тип сущности при работе с ним, так что это не проблема.

Универсальное решение, работающее в обоих случаях (имена ключей или нет): obj.key().id_or_name(). Таким образом, вы можете получить исходный объект следующим образом:

from google.appengine.ext import db
#...
obj_key = db.Key.from_path('EntityClass', id_or_name)
obj = db.get(obj_key)

Если вы не против передать длинную загадочную строку, которая также содержит некоторые дополнительные данные (например, имя вашего приложения GAE), вы можете использовать строковое представление ключа (str(obj.key()) и передать его непосредственно db.get для извлечения объекта.

2 голосов
/ 21 марта 2014

лучше:

string_key = entity.key().urlsafe()

и после того, как вы сможете расшифровать ключ с помощью

key = ndb.Key(urlsafe=string_key)
1 голос
/ 29 апреля 2011

Вы должны быть в состоянии сделать:

entity.key().name()

Это должно вернуть строковое представление ключа.Смотрите здесь

Это то, что вы ищете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...