Google App Engine NDB缓存循环局部变量

时间:2013-10-14 22:53:09

标签: google-app-engine python-2.7

# keyid is a string used for id in ndb keys. quest.reward=['1commonhead']
for keyid in quest.reward:
    item = ndb.Key('InventoryItem',keyid).get().toDict()
    rewards.append(item)

TypeError:键ID必须是字符串或数字;收到{'gearType':'','level':1L,'color':'lime','intelligence':2L,'damage':2L,'className':'uncommonsword','grade':'uncommon' ,'subType':'剑','prettyName':'不常见的松鼠之剑','类型':'武器'}

我尝试过传递kwds use_cache和use_memcache False,但这似乎不起作用。 这是我目前的修复。这对我来说很麻烦。我错过了关于上下文缓存的一些内容吗?

rewards = []
for keyid in quest.reward:
    item = keyid
    if type(keyid) == str:
        item = ndb.Key('InventoryItem',keyid).get().toDict()
    rewards.append(item)

1 个答案:

答案 0 :(得分:0)

看起来你没有意识到quest.reward中的内容。

错误说你不能使用字典作为关键元素,这就是你要做的事情。

迭代quest.reward的结果是

{'gearType': '', 'level': 1L, 'color': 'lime', 'intelligence': 2L, 'damage': 2L, 'className': 'uncommonsword', 'grade': 'uncommon', 'subType': 'sword', 'prettyName': 'Uncommon sword of the Squirrel', 'type': 'weapon'}

这意味着quest.reward是一个字典列表(至少1个字典)

我怀疑缓存与此有什么关系。 quest.reward来自何处以及如何定义。