django时间范围查询居然不包括end_date?必须往后面加一天才行?

django时间范围查询居然不包括end_date?必须往后面加一天才行?

result =AmazonHistoryPrice.objects.filter(identification=identification,created_at__range=[start_date, end_date]).order_by('created_at').all()

CREATE TABLE "amazon_app_amazonhistoryprice" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "month" integer NOT NULL, "day" integer NOT NULL, "identification" text NOT NULL, "price" integer NOT NULL, "year" integer NOT NULL, "created_at" datetime NULL);

import requests

url = "127.0.0.1/api/amazon/get_history_price"

payload={'identification': 'B0BF9LBYXJ',

'start_date': '2023-2-20',

'end_date': '2023-2-23'}

files=[

]

headers = {}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)


回答:

在 Django 中进行时间范围查询时,确实需要注意一些细节,特别是涉及到日期的比较时。如果你使用的是 Django 的 filter() 方法进行查询,通常是使用 __range 参数指定时间范围,如下所示:

from django.db.models import Q

from datetime import datetime, timedelta

start_date = datetime(2022, 1, 1)

end_date = datetime(2022, 1, 31)

query = Q(date__range=(start_date, end_date))

results = MyModel.objects.filter(query)

在上述代码中,date__range 参数用于指定查询的时间范围,其中包含 start_date 和 end_date 两个日期。但需要注意的是,这里的时间范围是左闭右闭的,也就是说,查询的结果将包括起始时间和结束时间这两个时间点。

如果你想要查询的时间范围是左闭右开的,即包含起始时间但不包含结束时间,可以将结束时间加上一天,如下所示:

from django.db.models import Q

from datetime import datetime, timedelta

start_date = datetime(2022, 1, 1)

end_date = datetime(2022, 2, 1) - timedelta(days=1)

query = Q(date__range=(start_date, end_date))

results = MyModel.objects.filter(query)

在上述代码中,我们将 end_date 减去一天,得到一个新的日期,作为查询的结束时间。这样就可以实现左闭右开的时间范围查询了。


回答:

不太清楚的你调用的API是怎么规定的,是不是不指定时间,就是2023-2-23 00:00:00
如果是,就是要指定时间 2023-2-23 23:59:59

以上是 django时间范围查询居然不包括end_date?必须往后面加一天才行? 的全部内容, 来源链接: utcz.com/p/938761.html

回到顶部