【发布时间】:2021-08-08 15:55:12
【问题描述】:
我有一个简单的查询,我检索从当前日期的上午 12 点到当前时间的所有行。
time_now = datetime.now()
time_passed = time_now.hour * 60 + time_now.minute
a = (datetime.now() - timedelta(minutes=time_passed))
b = datetime.now()
result_inwardCount = MYmsEvents.objects.all().filter(recorded_at__range=[a, b],event='In-ward')
print(result_inwardCount.query)
print(len(result_inwardCount))
现在当我打印查询时,它给了我这个:
SELECT "m_yms_events"."id", "m_yms_events"."vin", "m_yms_events"."event", "m_yms_events"."location", "m_yms_events"."recorded_at", "m_yms_events"."sys_id", "m_yms_events"."x", "m_yms_events"."y", "m_yms_events"."last_updated" FROM "m_yms_events" WHERE ("m_yms_events"."event" = In-ward AND "m_yms_events"."recorded_at" BETWEEN 2021-05-19 00:00:37+05:30 AND 2021-05-19 16:49:37+05:30)
这给了我0 的结果。当我在pgAdmin 中运行相同的查询时,它给了我41 行。
以下是添加撇号后的查询:
SELECT "m_yms_events"."id", "m_yms_events"."vin", "m_yms_events"."event", "m_yms_events"."location", "m_yms_events"."recorded_at", "m_yms_events"."sys_id", "m_yms_events"."x", "m_yms_events"."y", "m_yms_events"."last_updated" FROM "m_yms_events" WHERE ("m_yms_events"."event" = 'In-ward' AND "m_yms_events"."recorded_at" BETWEEN '2021-05-19 00:00:37+05:30' AND '2021-05-19 16:49:37+05:30')
Postgres 中的时区是 IST,服务器上的时区也是。
【问题讨论】:
-
只是一个额外的小费。
print(len(result_inwardCount))应该是print(result_inwardCount).count()。它更快更好。你可以在这里了解原因stackoverflow.com/questions/14327036/…。
标签: django postgresql django-orm