Question

J'ai une entité avec une selfreferencyproperty et je voulais chercher avec une condition WHERE sur la clé du champ selfref. Mon intention est de réduire DB succès en construisant une liste des clés, puis itérer sur la même entité pour construire une liste imbriquée. J'utilise cette liste pour memcache.get_multi hit () pour une version en cache dictionnaire des resultsets que je veux revenir. Voici une version abrégée du entitiy:

class Link(db.Model):     
    member = db.ReferenceProperty(Member)     
    url = db.TextProperty()   
    title = db.StringProperty()   
    category =db.SelfReferenceProperty()

J'ai construit un dictionnaire clé « catégorie » basée sur une autre entité qui l'information d'accès aux magasins. Ce que je veux faire est quelque chose comme:

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)

Mais je reçois le "BadQueryError: Erreur d'analyse: non valide condition WHERE". Erreur

Je sais que je peux passer toute entité dans la catégorie:

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

mais il semble que RPCs gaspillés si je possède déjà la valeur de clé pour la catégorie I à filtrer.

Y at-il un moyen d'utiliser une condition WHERE sur la clé d'un referencyproperty?

Merci

Était-ce utile?

La solution

Propriétés de référence sont stockées sous forme de clés, de sorte que vous pouvez les comparer directement:

for categoryKey in accessDict:  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1', db.Key(categoryKey))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top