0

Ich habePython App Engine Sortieren Abfrage durch zwei

class Neighborhood(model) { 
    name = db.StringProperty(required=True) 
    city = EncodedProperty(encoder=_get_city_name) 
} 

und ich möchte alle der Umgebung Objekte und Attribute Objekt ein Modell abzurufen und sie sowohl durch „name“ und „Stadt“ Attribute sortieren. Am Anfang habe ich versucht,

def retrieveAndSort() 
    query=Neighborhood.all() 
    query.order("name") 
    query.order("city") 
    return query 

aber nach einiger weiteren Forschung, scheint es GAE nicht für EncodedProperty Sortieren von Objekten unterstützt. Dann habe ich versucht, die Daten in Python nach dem Abrufen des Abfrageobjekts mit der sort()-Methode zu sortieren, aber das Abfrageobjekt verfügt nicht über diese Methode. Schließlich habe ich versucht, das Abfrage-Objekt mit der sorted() Methode mit dem Code zu sortieren:

neighborhoods = sorted(neighborhoods, key=attrgetter('city', 'name'))

und es funktionierte fast. Die Daten schienen jedoch durcheinander zu sein und ich erhielt eine Ausgabe wie die folgende.

Ich habe absolut keine Ahnung, warum dies andere auftritt und würde jede mögliche Hilfe schätzen.

Edit: Kürzere Beispielausgabe:

New York City - Meatpacking District 
New York City - Brooklyn 
New York City - Midtown West 

Antwort

0

Ich denke, dass Sie die Einheiten zu holen haben und sortieren Sie es dann.

neighborhoods = Neighborhood.all().fetch(1000) 
neighborhoods = sorted(neighborhoods, key=attrgetter('city', 'name')) 
+0

Leider ist für mich scheint nicht, dass die Arbeit:

class Neighborhood(db.model): name = db.StringProperty(required=True) city = db.StringProperty(required=True) 

Dann einfach Ihre Abfrage-Funktion sein könnte. – crossfuse999

+0

Können Sie die Codezeilen anzeigen, die Nachbarschaften zuweisen? – gipsy

+0

Was meinst du mit Zuweisen von Nachbarschaften? Um das aktuelle Ergebnis zu erhalten, habe ich jetzt das Neighborhood-Modell, eine retrieveAndSort() - Funktion, die nur die Abfrage nach "name" anordnet und sie zurückgibt, und den folgenden Code in einer anderen Datei "neighbilitys = retrieveAndSort()", "Nachbarschaften" = sortiert (Nachbarschaften, Schlüssel = attritter ('Stadt', 'Name')) ' – crossfuse999

0

Die Frage ist, wie gae-Datenspeicher markiert aber „EncodedProperty“ ist kein Datenspeicher Objekttyp. https://cloud.google.com/appengine/docs/python/datastore/typesandpropertyclasses

sollte das Modell sein:

def retrieveAndSort(): 
    """ 
    Returns everything in Neighborhood model alphabetically 
    """ 
    query = db.GqlQuery('SELECT * FROM Neighborhood ORDER BY city DESC') 
    for place in query: 
     print "{0} - {1}".format(place.city, place.name) 
Verwandte Themen