带有selfreferenceproperty键的GqlQuery

时间:2010-09-07 21:49:51

标签: google-app-engine gqlquery

我有一个具有selfreferencyproperty的实体,我想在selfref字段的键上搜索WHERE条件。我的目的是通过构建密钥列表来减少数据库命中,然后迭代同一个实体来构建嵌套列表。我正在使用此列表命中memcache.get_multi()以获取我想要返回的结果集的缓存字典版本。以下是权利的缩短版本:

class Link(db.Model):     
    member = db.ReferenceProperty(Member)     
    url = db.TextProperty()   
    title = db.StringProperty()   
    category =db.SelfReferenceProperty()

我根据存储访问信息的另一个实体构建了一个“类别”密钥字典。我想做的是:

for categoryKey in accessDict:  
    categoryDBKey = db.Key(categoryKey)  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category.key() = :1',categoryDBKey )  

for qItem in q:  
    cacheList.append('Link_' + str(qItem))  
    dataCache = memcache.get_multi(cacheList)

但是我得到了“BadQueryError:Parse Error:Invalid WHERE Con​​dition”错误。

我知道我可以通过以下方式传递整个类别实体:

for categoryKey in accessDict:  
    category = db.ket(db.Key(categoryKey))  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1',category)

但如果我已经拥有要过滤的类别的键值,那么看起来似乎浪费了RPC。

有没有办法在referencyproperty的密钥上使用WHERE条件?

由于

1 个答案:

答案 0 :(得分:2)

参考属性存储为键,因此您可以直接比较它们:

for categoryKey in accessDict:  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1', db.Key(categoryKey))