2009-04-04 2 views
1

Was ist die optimale Abfrage, um alle Datensätze für einen bestimmten Tag zu erhalten? In meinem Wettermodell ist "timestamp" ein Standard-DateTimeField.Optimale timestamp-basierte Abfrage in Django

Ich bin derzeit mit

start = datetime.datetime(2009, 1, 31) 
end = start + datetime.timedelta(hours=23, minutes=59, seconds=59) 
Weather.objects.filter(timestamp__range=(start, end)) 

aber frage mich, ob es eine effizientere Methode.

+0

Mit der Methode von Scott unter meiner Abfragegeschwindigkeit sank um fast eine Größenordnung. Danke Scott! – grahamu

Antwort

4

So wie es in django.views.generic.date_based getan ist:

{'date_field__range': (datetime.datetime.combine(date, datetime.time.min), 
         datetime.datetime.combine(date, datetime.time.max))} 

Es sollte bald ein patch merged into Django sein, die eine __date Lookup für genau diese Art der Abfrage (http://code.djangoproject.com/ticket/9596) zur Verfügung stellt.

2
  1. nicht vorzeitig optimieren
  2. Index Spalten, die Ihre Abfragen basieren auf häufig
  3. optimieren teuer Spalten, wie Auto-Aktualisierung Jahr, Monat hinzufügen und Tag-Werte (vielleicht auch nur als String), wenn und Nur wenn Tests zeigen, dass es eine signifikante Beschleunigung liefert und erst nach dem Gebrauch von dem, was bereits funktioniert, NOW und der Bestimmung ist es nicht lebensfähig.