GQL mit zwei Tischen

Hallo, ich mache eine sehr kleine Anwendung in Google Appengine und ich benutze Python. Mein Problem ist, dass ich zwei Tabellen mit de db.model ("Clients" und "Anfragen") habe. Die Tabelle "Client" hat die E-Mail- und Namensfelder und die Tabelle "Anfragen" hat die E-Mail- und Ausgabefelder. Ich möchte eine Abfrage, die für jede Anfrage die E-Mail, Ausgabe und Client-Namen, wenn die E-Mail ist die gleiche in den beiden Tabellen. Kann jemand bitte helfen?

  • Das neueste Datenelement erhalten - Google App Engine - Python
  • Eins-zu-Viele-GQL-Abfrage und Putting Ergebnisse in ein Wörterbuch
  • Wie konstruiere ich GQL, um keinen Wert aus einem Satz zu enthalten?
  • In einer GQL-Frage, was ANCESTOR IS: 1 genau bedeutet?
  • App Engine Datastore IN Operator - wie zu verwenden?
  • App Engine GQL Query - Sortierung
  • Python: DISTINCT auf GQuery Ergebnismenge (GQL, GAE)
  • Google App Engine GQL Abfrage auf localhost
  • 2 Solutions collect form web for “GQL mit zwei Tischen”

    Der App-Engine-Datenspeicher unterstützt keine Joins, so dass Sie dieses Problem mit GQL nicht lösen können. Sie können zwei bekommt, eine für Client und eine für Anfrage, oder Sie können eine ReferenceProperty verwenden, um eine Beziehung zwischen den beiden Entitäten zu etablieren.

    Wenn Sie eine Eins-zu-Viele-Beziehung modellieren müssen, können Sie es mit einer Referenz-Eigenschaft machen. Für deinen Fall würde es so aussehen:

    class Client(db.Model): email = db.UserProperty() name = db.StringProperty() class Request(db.Model): client = db.ReferencePrpoerty(Client, collection_name='requests') issue = db.StringProperty() 

    Jede Client-Instanz, die eine damit verbundene Anforderung hat, erhält automatisch eine Eigenschaft namens Requests, die ein Abfrageobjekt ist, das alle Anforderungsentitäten zurückgibt, die ein Clientfeld haben , das auf die jeweilige Cliententität festgelegt ist, mit der Sie zu tun haben.

    Vielleicht möchten Sie auch sicherstellen, dass der Code, der Anforderungsentitäten erstellt, jede neue Entität festlegt, um die Cliententität für den jeweiligen Benutzer als seinen Vorfahren zu haben. Die Beibehaltung dieser assoziierten Positionen in der gleichen Entity-Gruppe könnte aus Performance-Gründen und Transaktionen hilfreich sein.

    Mit diesen modellen:

     class Client(db.Model): email = db.StringProperty() name = db.StringProperty() class Request(db.Model): client = db.ReferenceProperty(Client, collection_name='requests') issue = db.StringProperty() 

    Mit diesem Code können Sie die Daten abfragen

     from modelos import Client,Request ctes=Client.all().filter("email =","somemail@mailbox.com.mx") for ct in ctes: allRequest4ThisUser=Request.all().filter("client =",ct) for req in allRequest4ThisUser: print req.issue 
    Python ist die beste Programmiersprache der Welt.