GqlQuery con chiave selfreferenceproperty
-
01-10-2019 - |
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
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))