Frage

Ich habe ein Unternehmen mit einem selfreferencyproperty und ich wollte mit einer WHERE-Bedingung auf dem SELFREF Feld Schlüssel suchen. Meine Absicht ist DB Treffer zu reduzieren, indem eine Liste von Schlüsseln erstellen, dann die gleiche Einheit Iterieren über eine verschachtelte Liste zu erstellen. Ich bin mit dieser Liste memcache.get_multi () für eine im Cache gespeicherten Wörterbuch Version des Resultset schlagen wir zurückkehren möchten. Hier ist eine verkürzte Version des Rechtsträgers:

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

Ich habe eine „Kategorie“ Schlüssel-Wörterbuch basiert auf einem anderen Unternehmen, die Geschäfte Zugangsinformation gebaut. Was ich tun möchte, ist so etwas wie:

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)

Aber ich bekomme die "BadQueryError: Parse-Fehler: Ungültige WHERE Bedingung". Fehler

Ich weiß, ich kann nur die ganze Kategorie Einheit passiert in:

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

aber wie verschwendete RPCs scheint, wenn ich bereits den Schlüsselwert für die Kategorie muss ich Filter wollen.

Gibt es eine Möglichkeit, eine WHERE-Bedingung auf einen referencyproperty des Schlüssel zu benutzen?

Danke

War es hilfreich?

Lösung

Referenzobjekte werden als Schlüssel gespeichert, so dass Sie sie direkt vergleichen kann:

for categoryKey in accessDict:  
    q = db.GqlQuery('SELECT __key__ FROM Link WHERE category = :1', db.Key(categoryKey))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top