2011-08-31 96 views
0

從數據存儲中獲取實體後,我想將其密鑰保存到memcache中,並將其作爲參數的一部分傳遞給以後參考的任務的一部分。將appengine數據庫鍵值保存到memcache中

但是,由於密鑰是一個複合項目,因此您無法按原樣轉發它,並且當我嘗試重新構造密鑰時,值不相同。

傳遞密鑰以便稍後引用實體的最佳方法是什麼?

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

嘗試:memcache.set('%s'%entity_key,some_piece_of_data) –

回答

2

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

甲鍵可以通過將密鑰對象str()(或調用對象的方法__str__())被編碼爲字符串。字符串編碼密鑰是一種不透明的值,它使用安全的字符來包含在URL中。字符串編碼密鑰可以通過將密鑰對象傳遞給密鑰構造函數(編碼參數)而轉換回密鑰對象。