我有一个具有自我介绍的实体,我想在SelfRef Field键的地方进行搜索。我的目的是通过构建密钥列表来减少DB命中,然后在同一实体上迭代以构建嵌套列表。我正在使用此列表来点击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:解析错误:条件下的错误”错误。

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

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

但是,如果我已经拥有要过滤的类别的关键值,则似乎浪费了RPC。

有没有一种方法可以使用ReferencyProperty键上的任何条件?

谢谢

有帮助吗?

解决方案

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

for categoryKey in accessDict:  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1', db.Key(categoryKey))
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top