質問

SelfReferencyPropertyのエンティティがあり、SelfRefフィールドのキーの条件で検索したかったのです。私の意図は、キーのリストを作成することで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:Parse Error:条件がある場合は無効」エラーがあります。

カテゴリエンティティ全体を渡すことができることを知っています。

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

しかし、フィルタリングしたいカテゴリの重要な値をすでに持っている場合、無駄なRPCSのようです。

ReferencyPropertyのキーの条件を使用する方法はありますか?

ありがとう

役に立ちましたか?

解決

参照プロパティはキーとして保存されるため、それらを直接比較できます。

for categoryKey in accessDict:  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1', db.Key(categoryKey))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top