0

在 MySQL 后端,Django 转换filter(date__year=2011)... WHERE date BETWEEN 2011-01-01 00:00:00 and 2011-12-31 23:59:59.99in SQL,执行需要 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吗?看起来django生成的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 回答