0

MySQL バックエンドでは、Django は in SQL に変換filter(date__year=2011)... WHERE date BETWEEN 2011-01-01 00:00:00 and 2011-12-31 23:59:59.99ます。実行には 3 秒かかります。時間の部分を手動で削除して として実行すると... WHERE date BETWEEN 2011-01-01 and 2011-12-31、実行時間が 1/100 ~ 30 ミリ秒低下します。

日付範囲クエリの解釈方法に根本的な問題があるようです。これを回避するためのアイデアはありますか?

Django ORM を使用する方法が見つからない場合は、モデルに年フィールドを追加して年を格納し、その整数年フィールドに対してクエリを実行します。

お時間をいただきありがとうございます。

ps: 私の手に負えない制限のために、環境は Django 1.1 です。これは、Django の新しいバージョンで修正されるか、より適切に最適化される可能性があります。

4

1 に答える 1

2

試しましたrangeか?ジャンゴの生成されたSQLは生のSQLと等しいようです。1.1で動作

.filter(date__range(datetime.date(2011,1,1), datetime.date(2011,12,31))

に相当:

SELECT ... WHERE date BETWEEN '2011-01-01' and '2011-12-31';

于 2011-04-11T16:54:53.313 に答える