2009-04-04 5 views
1

特定の日のすべてのレコードを取得するための最適なクエリは何ですか? Weatherモデルでは、「タイムスタンプ」は標準のDateTimeFieldです。Djangoでの最適なタイムスタンプベースのクエリ

私は現在

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

を使用しますが、より効率的な方法があるかどうかだろうよ。

+0

スコットの方法を使用すると、クエリの速度がほぼ一桁低下しました。スコットに感謝します! – grahamu

答えて

4

それはdjango.views.generic.date_basedで行うの方法は次のとおりです。

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

すぐクエリのまさにこのタイプ(http://code.djangoproject.com/ticket/9596)のため__date検索を提供しますpatch merged into Djangoがあるはずです。

2
  1. (単なる文字列として多分)自動更新年、月、日の値を追加するように途中で、あなたのクエリが頻繁に
  2. 最適化高価な列に基づいている
  3. 索引列を最適化していない場合とテストが有意なスピードアップを示している場合にのみ、既に動作しているものを使用して、それが実行可能でないと判断した場合にのみ実行されます。