Wenn ich zwei Tabellen habe, Unternehmen und Vertrieb, und möchte ich beide Datensätze in einer einzigen Liste anzeigen, wie würde ich dies in Google App Engine mit GQL tun?Auf Google AppEngine, was ist der beste Weg, um zwei Tabellen zusammenzuführen?
Die Modelle sind:
class Company(db.Model):
companyname = db.StringProperty()
companyid = db.StringProperty()
salesperson = db.StringProperty()
class Sales(db.Model):
companyid = db.StringProperty()
weeklysales = db.StringProperty()
monthlysales = db.StringProperty()
Die Ansichten sind:
def company(request):
companys = db.GqlQuery("SELECT * FROM Company")
sales = db.GqlQuery("SELECT * FROM Sales")
template_values = {
'companys' : companys,
'sales' : sales
}
return respond(request, 'list', template_values)
Liste html enthält:
{%for company in companys%}
{% for sale in sales %}
{% ifequal company.companyid sales.companyid %}
{{sales.weeklysales}}
{{sales.monthlysales}}
{% endifequal %}
{% endfor %}
{{company.companyname}}
{{company.companyid}}
{{company.salesperson}}
{%endfor%}
Jede Hilfe wäre sehr dankbar.
Seien Sie gewarnt, dass dies viel mehr Abfragen erstellt (1 plus eins pro Firma, anstatt 2 insgesamt). Es ist wahrscheinlich, dass es viel mehr Datenspeicheranfragen machen wird. Wenn die Anzahl der "Verkauf" -Objekte bei der Iteration eines Abfrageobjekts ungefähr der natürlichen Anforderungsgröße entspricht, macht das wenig Unterschied, aber ich bezweifle, dass damit gerechnet werden kann. –
Nicht mehr Abfragen, sondern mehr Datenspeichervorgänge. Das Auflösen einer Referenzeigenschaft erfordert eine Datenspeicherung, die viel billiger ist als eine Abfrage. –
Danke für die Klarstellung - die Dokumentation für Referenzeigenschaften sagt, "jede referenzierte Entität erhält eine Eigenschaft, deren Wert eine Abfrage ist, die alle Entitäten zurückgibt, die darauf verweisen". Also verteidige ich meine Behauptung, dass es mehr Abfragen erzeugt (d. H. Abfrageobjekte), und ich sage "Datenspeicheranforderungen", wenn ich "Datenspeicheroperationen" meine. Welche Art von Datenspeicheroperation, die Abfrageobjekt bei der Verwendung ausgibt, überlasse ich dem Experten :-) –