0

我有一个具有 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。

有没有办法在引用属性的键上使用 WHERE 条件?

谢谢

4

1 回答 1

2

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

for categoryKey in accessDict:  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1', db.Key(categoryKey))
于 2010-09-08T02:46:41.063 回答