将appengine db Key值保存到memcache中

时间:2011-08-31 17:18:19

标签: python google-app-engine

从数据存储区中获取实体后,我想将其密钥保存到内存缓存中,并将其作为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")

1 个答案:

答案 0 :(得分:2)

请参阅http://code.google.com/appengine/docs/python/datastore/keyclass.html#Key

通过将Key对象传递给str()(或调用对象的__str__()方法),可以将密钥编码为字符串。字符串编码的键是一个不透明的值,使用可安全包含在URL中的字符。通过将字符串编码的密钥传递给Key构造函数(编码的参数),可以将其转换回Key对象。