В зависимости от того, используете ли вы имена ключей или нет, 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
для извлечения объекта.