Effizienteste Weg, um die Liste der Werte von Django Queryset
Können, sehe ich durchaus ein paar verschiedene Möglichkeiten, dies zu tun und würde gerne ein feedback über die effizientesten oder 'best-practice' - Methode.
Bekomme ich eine Django-Queryset mit filter()
c_layer_points = models.layer_points.objects.filter(location_id=c_location.pk,season_id=c_season.pk,line_path_id=c_line_path.pk,radar_id=c_radar.pk,layer_id__in=c_layer_pks,gps_time__gte=start_gps,gps_time__lte=stop_gps)
Diese queryset könnte sehr groß sein (Hunderte von tausenden von Zeilen).
Nun, was geschehen muss, ist eine Umstellung auf Listen und Codierung JSON.
Optionen (die ich gesehen habe in meinen Recherchen):
- Schleife über die queryset
Beispiel:
gps_time = [lp.gps_time for lp in c_layer_points];
twtt = [lp.twtt for lp in c_layer_points];
- - Werte() oder values_list()
- Verwenden iterator()
Am Ende würde ich gerne codieren als json, so etwas wie dieses format:
{'gps_time':[list of all gps times],'twtt',[list of all twtt]}
Irgendwelche Tipps, der beste Weg, dies zu tun, wäre toll, Danke!
Warum würden Sie nicht einfach tun, die Messungen selbst?
Ich habe und werde dies auch weiterhin tun. Allerdings wollte ich einen von den anderen zu fühlen, was "best practice" wäre hier. Vor allem, da ein paar der Optionen sind fast die gleichen von einer Effizienz-Standpunkt aus.
import datetime; start = datetime.time(); <do your stuff> end = datetime.time(); print(end-start)
Ich habe und werde dies auch weiterhin tun. Allerdings wollte ich einen von den anderen zu fühlen, was "best practice" wäre hier. Vor allem, da ein paar der Optionen sind fast die gleichen von einer Effizienz-Standpunkt aus.
InformationsquelleAutor | 2013-06-07
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie nicht in der Lage sein, um das gewünschte format aus dem ORM. Jedoch, können Sie effektiv etwas tun, wie dieses:
- und jetzt teilen Sie die Tupel, die in beiden Listen: (Tupel unpacking)
.values_list()
(oder.iterator()
oder irgendetwas anderes, soweit ich das sagen kann), django liest alle Datensätze in den Speicher. Ideal für SQL-performance, nicht so groß für den Speicher, wenn wir reden über große Zeilen. Mein python-Prozess > 300 mb RAM. Ich landete mitPaginator
Durchlaufen Stücke von Aufzeichnungen. Speicher vs Geschwindigkeit ist ein Kompromiss, und ich ließ mich auf 10.000 Datensätze gleichzeitig.InformationsquelleAutor karthikr
Ich schlage vor, Sie verwenden das Durchlaufen der Abfrage entsprechen und die json-dictionary-element von element von queryset.
Normalerweise, Django ' s QuerySets faul sind, das heißt, Sie erhalten in den Speicher laden, Wann immer Sie bekommen, auf die zugegriffen wird. Laden Sie die gesamte Liste:
gps_time = [lp.gps_time for lp in c_layer_points]
haben Sie alle Objekte im Speicher (in tausend). Werden Sie gut, indem Sie eine einfache iteration:Als Nebeneffekt beachten Sie, dass Sie nicht brauchen, die
;
- Zeichen am Ende der Zeilen in python 🙂Hoffe, das hilft!
Hehehe da war, programmierte ich in C++, C# vor 😉
Ich bin mir nicht sicher, dass dies für mich arbeiten. Ich wirklich brauchen, um einige Operationen auf den Daten (was bedeutet, dass ich wirklich haben, um es zu laden in den Speicher als Listen). Zum Beispiel habe ich zu tun, einige interpolation basierend auf den Elementen in c_layer_points.
InformationsquelleAutor Paulo Bu