从数据存储区中获取实体后,我想将其密钥保存到内存缓存中,并将其作为url参数的一部分传递给稍后引用它的任务。
但是,由于Key是一个复合项,因此无法按原样转发它,当我尝试重新构造键时,值不相同。
传递密钥以便稍后引用该实体的最佳方法是什么?
entity_key = feed_entity.key()
logging.info(entity_key) # produces a string like key value
# would like to save a way to reference the key later
memcache.set(entity_key.id_or_name(), some_piece_of_data);
# Will produce the error:
# Key must be a string instance, received datastore_types.Key.from_path
# (u'FeedEntity', u'My_Entity_Name', u'FeedEntity', 2L, _app=u'dev~test_app')
reconstructed_key = Key.from_path('FeedEntity', 'My_Entity_Name', 'FeedEntity', entity_key.id_or_name());
logging.info(reconstructed_key)
# Not the same value as entity_key
params = {"key": entity_key_string_value} # this would be ideal
task = taskqueue.Task(url='/feed_entity/list', params=params).add(queue_name="feed-gopher")
答案 0 :(得分:2)
请参阅http://code.google.com/appengine/docs/python/datastore/keyclass.html#Key
通过将Key对象传递给str()
(或调用对象的__str__()
方法),可以将密钥编码为字符串。字符串编码的键是一个不透明的值,使用可安全包含在URL中的字符。通过将字符串编码的密钥传递给Key构造函数(编码的参数),可以将其转换回Key对象。