Nach Rückverweisen unbekannter Art in NDB

Ich bin gerade dabei, meinen ersten RESTful-Webdienst auf GAE und der Python 2.7-Laufzeitumgebung zu schreiben. Ich habe damit begonnen, Guidos glänzende neue ndb-API zu verwenden.

Ich bin mir jedoch nicht sicher, wie ich einen bestimmten Fall ohne die implizite Rückverweisfunktion der ursprünglichen Datenbank-API lösen soll. Wenn der Benutzeragent eine bestimmte Ressource anfordert und diese Ressourcen um 1 Grad entfernt wurden:

host / api / kind / id? depth = 2

Was ist der beste Weg, um eine verwandte Sammlung von Entitäten aus der "Eins" in einer Eins-zu-Viele-Beziehung zu ermitteln, da die Art der verwandten Entität zum Zeitpunkt der Entwicklung unbekannt ist?

Ich kann keine Ersatzabfrage wie in a beschrieben verwendenvorherige SO-Anfrage aufgrund der letzteren Einschränkung. Die Tatsache, dass mein Modell zur Laufzeit definierbar ist (und daher nicht fest codiert ist), hindert mich daran, eine Abfrage zum Filtern von Eigenschaften für übereinstimmende Schlüssel zu verwenden.

Vorfahren- und andere Artless-Abfragen sind auch aufgrund der Datenspeicherbeschränkung nicht möglich, die mich daran hindert, nach einer Eigenschaft ohne die angegebene Art zu filtern.

Bisher war die einzige Idee, die ich hatte (abgesehen von der Rückkehr zur DB-API), eine gruppenübergreifende Transaktion zu verwenden, um meine eigene Referenz auf die "Eins" zu schreiben, entweder durch Aktualisierung einer ndb.StringProperty (repeat = True), die enthält alle verwandten Arten, wenn eine Entität einer neuen Art eingeführt wird oder indem einfach eine Liste von Schlüsseln in der "einen" ndb.KeyProperty (repeat = True) jedes Mal gepflegt wird, wenn eine verwandte "viele" Entität in den Datenspeicher geschrieben wird.

Ich hoffe, dass jemand, der erfahrener ist als ich, einen besseren Ansatz vorschlagen kann.

Angesichts des Vorschlags von jmort253 werde ich versuchen, meine Frage durch ein konkretes Beispiel aus den Dokumenten zu ergänzen:

class Contact(ndb.Expando):
    """ The One """

    # basic info
    name = ndb.StringProperty()
    birth_day = ndb.DateProperty()

    # If I were using db, a collection called 'phone_numbers' would be implicitly 
    # created here.  I could use this property to retrieve related phone numbers 
    # when this entity was queried.  Since NDB lacks this feature, the service 
    # will neither have a reference to query nor the means to know the 
    # relationship exists in the first place since it cannot be hard-coded.  The
    # data model is extensible and user-defined at runtime; most relationships
    # will be described only in the data, and must be discoverable by the server.
    # In this case, when Contact is queried, I need a way to retrieve the
    # collection of phone numbers.

    # Company info.
    company_title = ndb.StringProperty()
    company_name = ndb.StringProperty()
    company_description = ndb.StringProperty()
    company_address = ndb.PostalAddressProperty()

class PhoneNumber(ndb.Expando):
    """ The Many """

    # no collection_name='phone_numbers' equivalent exists for the key property
    contact = ndb.KeyProperty(kind='Contact')
    number = ndb.PhoneNumberProperty()

Antworten auf die Frage(2)

Ihre Antwort auf die Frage