开发者

Saving appengine db Key value into memcache

开发者 https://www.devze.com 2023-03-31 21:26 出处:网络
After fetching an entity from the datastore, I\'d like to save its key into memcache and also pass it as part of a url parameter for a task for referencing it later.

After fetching an entity from the datastore, I'd like to save its key into memcache and also pass it as part of a url parameter for a task for referencing it later.

However, since Key is a composite item, you can't forward it as is and when I try to re-construct the key, the values aren't identical.

What's the best approach for passing of a key to reference the entity at a later time?

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_na开发者_如何学运维me="feed-gopher")


See http://code.google.com/appengine/docs/python/datastore/keyclass.html#Key

A key can be encoded to a string by passing the Key object to str() (or calling the object's __str__() method). A string-encoded key is an opaque value using characters safe for including in URLs. The string-encoded key can be converted back to a Key object by passing it to the Key constructor (the encoded argument).

0

精彩评论

暂无评论...
验证码 换一张
取 消