Domanda

Ho un'entità con un selfreferencyproperty e volevo cercare con una condizione WHERE sulla chiave del campo selfref. Il mio intento è quello di ridurre colpi DB con la costruzione di un elenco di chiavi, poi iterare sulla stessa entità di costruire una lista annidata. Sto usando questa lista di colpire memcache.get_multi () per una versione dizionario cache dei gruppi di risultati che voglio tornare. Ecco una versione abbreviata del entitiy:

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

Ho creato una "categoria" dizionario chiave sulla base di un altro soggetto, che memorizza le informazioni di accesso. Quello che voglio fare è qualcosa di simile:

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)

Ma ho la "BadQueryError: Errore di analisi: nullo se Condition". Errore

So che posso solo passare l'intera entità categoria in:

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

ma sembra RPC sprecati se ho già il valore della chiave per la categoria che voglio filtro.

C'è un modo per utilizzare una condizione WHERE in chiave di un referencyproperty?

Grazie

È stato utile?

Soluzione

Proprietà di riferimento vengono memorizzate come chiavi, in modo da poterli confrontare direttamente:

for categoryKey in accessDict:  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1', db.Key(categoryKey))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top