Pregunta

Tengo una entidad con una selfreferencyproperty y quería buscar con una condición WHERE en la clave del campo selfref. Mi intención es reducir éxitos DB mediante la construcción de una lista de claves, entonces la iteración en la misma entidad para construir una lista anidada. Estoy utilizando esta lista para golpear memcache.get_multi () para una versión del diccionario en caché de los conjuntos de resultados que desea devolver. Aquí es una versión abreviada de la entitiy:

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

Me han construido una "categoría" diccionario de claves basado en otra entidad que almacena la información de acceso. Lo que quiero hacer es algo como:

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)

Pero me sale el "BadQueryError: Error de análisis: Condición WHERE no válidas". Error

Sé que sólo puede pasar toda la entidad categoría en:

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

pero parece que RPC desperdiciados si ya tengo el valor de la clave para la categoría quiero filtro en.

¿Hay una manera de utilizar una condición WHERE en la tecla de un referencyproperty?

Gracias

¿Fue útil?

Solución

Referencia de las propiedades se almacenan como claves, para que pueda comparar directamente:

for categoryKey in accessDict:  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1', db.Key(categoryKey))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top