django - Django ORM datetime __range 字段查找未正确过滤
问题描述
我有一个简单的查询,我在其中检索从当前日期的上午 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
,服务器上的时区也是 。
解决方案
正如您在Django 文档__range
中看到的那样,直接使用Django字段查找。datetimes
这是一个简单的工作示例:
import datetime
start_date = datetime.date(2005, 1, 1)
end_date = datetime.date(2005, 3, 31)
Entry.objects.filter(pub_date__range=(start_date, end_date))
在您的特定情况下,只需删除将您转换datetimes
为strings
( .strftime('%Y-%m-%d %H:%M:%S')
) 的代码部分:
a = (datetime.now() - timedelta(minutes=time_passed))
b = datetime.now()
result_inwardCount = MYmsEvents.objects.all().filter(recorded_at__range=[a, b], event='In-ward')
推荐阅读
- ruby-on-rails - accept_nested_attributes_for 与 Rails 中的关系数据库逻辑相矛盾
- algorithm - 无向投影依赖解析算法
- android - 为什么我的 SwitchCompat OnCheckedChangeListener 在创建时触发,我该如何阻止它?
- c# - C# 使用 ComboBox 中的选定项
- batch-file - 混合 Batch-VBScript 文件中的发送键
- java - Java Regex 从字符串中提取数字和字符串
- react-native - ReactNative如何设置Text组件文本垂直居中
- apache-camel - 在 Apache ServiceMix Bundle 中创建路由:列表状态为宽限期
- python - 使用 Opencv 库制作视频,但不确定如何指定或将其转换为 h264 编解码器格式
- encryption - 如何通过已知明文及其密文攻击CBC和OFB?