Django查询和终端

时间:2018-05-28 15:48:09

标签: python django postgresql django-queryset django-orm

我有一个运行良好的Django查询,但执行速度慢于我在终端中进行相同的查询。好奇心我在终端运行了django查询(我从Django Debug Tooltbar读取),我得到了相同的慢查询。我试图找出可能存在的问题,我怀疑是::timestamp转换。

我尝试在下面提出我的问题:

我的django查询:

   query=Table.filter(time_stamp__range=('2017-05-28 01:00:00',  '2017-05-28 07:00:00')).values('time_stamp',  'value')

根据Django Debug Toolbar,这与原始sql语句相同:

SELECT * FROM "table" WHERE "table"."time_stamp" BETWEEN '2018-05-28T01:00:00.004325'::timestamp AND '2018-05-28T07:00:00.004325'::timestamp

根据调试工具栏结果,我得到 1436,11 ms 的运行时间。

之后我通过终端登录我的PostgreSQl数据库并使用了这个查询:

select * from table where time_stamp between '2018-05-28 01:00:00' and '2018-05-28 07:00:00';

这里我有 753.086 ms 的执行时间。

我的模特样本:

class Table(models.Model):
    time_stamp = models.DateTimeField()
    value = models.FloatField(blank=True, null=True)

在我看来,除了Django查询中的时间戳(::timestamp)对话之外,两个查询是相同的。

我怎么能避免我的Django查询中的时间戳对话?谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

使用django的ORM会产生开销,它会将记录转换为对象。它(几乎?)总是比原始SQL慢。

如果您只需要数据而不是Table模型的实例,则可以query the database directly