2010-11-30 15 views
0

Wenn ich mache:Frage zum Liste (queryset)

queryset=User.objects.all() 
lst=list(queryset) 

dann

print lst[2].first_name 

dauert es, die first_name des zweiten Elements aus der Datenbank oder aus dem Speicher?

Antwort

4

Wenn Sie list(queryset) aufrufen, wird die Abfrage in der Datenbank ausgewertet und im Speicher gespeichert. Also die print[2].first_name wird nicht wieder die db treffen, sondern ziehen Sie es aus dieser In-Memory-Liste.

+1

@Pol: Wenn Sie darüber nachdenken, kann es nichts anderes tun. Sobald Sie 'list' aufgerufen haben, ist es nicht mehr ein Abfrage-Set - es ist eine Liste. Und Listen wissen nichts über Datenbanken. –

+1

Aber links von der Liste gibt es Benutzerinstanzen. Und Benutzerinstanzen sind es geerbte Objekte der Model-Klasse. Und Modellklasse hat eine Menge Beziehung zur Datenbank. – Pol

+0

Ja, aber ein Modell weiß tatsächlich nichts über die Datenbank. Ein Modell wird von der db und dem Abfrage-Set aufgefüllt und weiß, wie es sich selbst zurückspeichert, ist aber auf keine andere Weise damit verbunden. –