0
我有一个具有自引用属性的实体,我想在自引用字段的键上使用WHERE条件进行搜索。我的目的是通过构建一个键列表来减少数据库命中,然后迭代同一个实体来构建一个嵌套列表。我使用这个列表为我想要返回的结果集的缓存字典版本创建memcache.get_multi()。这里是entitiy缩短版:带自引用属性键的GqlQuery
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:分析错误:无效的WHERE条件”错误。
我知道我可以只通过全品类实体:
for categoryKey in accessDict: category = db.ket(db.Key(categoryKey)) q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1',category)
但它似乎是浪费的RPC如果我已经有我想要过滤的类别键值。
有没有一种方法来使用引用属性的键上的WHERE条件?
感谢
感谢德鲁,我必须想尽组合,但工作最简单的一种。 – user441842 2010-09-08 04:20:15