我有一个具有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 Condition”错误。
我知道我可以通过以下方式传递整个类别实体:
for categoryKey in accessDict: category = db.ket(db.Key(categoryKey)) q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1',category)
但如果我已经拥有要过滤的类别的键值,那么看起来似乎浪费了RPC。
有没有办法在referencyproperty的密钥上使用WHERE条件?
由于
答案 0 :(得分:2)
参考属性存储为键,因此您可以直接比较它们:
for categoryKey in accessDict:
q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1', db.Key(categoryKey))