2009-04-04 12 views
1

Quelle est la requête optimale pour obtenir tous les enregistrements pour un jour spécifique? Dans mon modèle Weather, 'timestamp' est un champ DateTimeField standard.Requête d'horodatage optimale dans Django

J'utilise actuellement

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

se demander s'il existe une méthode plus efficace.

+0

En utilisant la méthode de Scott ci-dessous ma vitesse de requête a chuté de près d'un ordre de grandeur. Merci Scott! – grahamu

Répondre

4

La façon dont il est fait en django.views.generic.date_based est:

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

Il devrait y avoir bientôt un patch merged into Django qui fournira une recherche de __date exactement ce type de requête (http://code.djangoproject.com/ticket/9596).

2
  1. Ne pas prématurément optimiser
  2. colonnes d'index que vos requêtes sont basées sur fréquemment
  3. Optimize colonnes coûteuses, comme ajouter année automatique mis à jour, le mois et les valeurs de jour (peut-être comme une chaîne) si et seulement si les tests montrent qu'il fournit une accélération significative et seulement après avoir utilisé ce qui fonctionne déjà et déterminer qu'il n'est pas viable.
Questions connexes