1

Wie kann ich nur die in der Projektionsabfrage angegebenen Entitätseigenschaften in der _properties Liste der Entität abrufen?Nur projizierte Eigenschaften einer Entität abrufen

ich meine:

class Demo(ndb.Model): 
    first_prop = ndb.StringProperty() 
    second_prop = ndb.StringProperty() 

Demo(first_prop='First', second_prop='Second').put() 

q = Demo.query(projection=[first_prop]) 
e = q.fetch() 
print e[0]._properties.keys() 

kehrt ['second_prop', 'first_prop']. Ich möchte len(_properties)1 ...

+0

Ich weiß Abfrage 'q' hat 'Projektion' Attribut, nur nicht verstehen, wie zu prüfen, ob die Eigenschaft zur Projektion gehören: 'q.projection' gibt '(Demo ('first_prop'),)' aber 'if q_proj und prop in q_proj' funktioniert einfach nicht ... – user2154587

Antwort

1

Es gibt eine _projection Eigenschaft sein, das Sie auf das Ergebnis (durch Laden es in Ihrem Browser http://localhost:8080/projection mindestens zweimal aufrufen diesen Handler) verwenden können:

import webapp2 
from google.appengine.ext import ndb 


class Dummy(ndb.Model): 
    p1 = ndb.StringProperty() 
    p2 = ndb.StringProperty() 


class ProjectionHandler(webapp2.RequestHandler): 

    def get(self): 
     # run this handler at least twice before looking at the console output 
     d = Dummy(id='abc') 
     d.p1 = 'p1' 
     d.p2 = 'p2' 
     d.put() 
     q = Dummy.query(projection=['p1']) 
     r = q.fetch() 
     if len(r) > 0: 
      print r[0]._properties.keys() # prints: ['p1', 'p2'] 
      print r[0]._projection # prints: ('p1',) 

app = webapp2.WSGIApplication([ 
    ('/projection', ProjectionHandler) 
]) 

Zusätzlich ,

q.projection Returns (Demo ('first_prop'))

Ist es möglich, dass Sie anstelle des Namens der Eigenschaft als Zeichenfolge, z. B. 'first_prop', die Entität oder ein anderes Objekt in Demo.query(projection=[first_prop]) übergeben? Sie sollten das gleiche Ergebnis wie r[0]._projection erhalten.

Verwandte Themen