下面是关于 Django 中使用 DateTime 常用的时间查询方式的完整攻略。
1. DateTime 常用查询方式
Django 中使用 DateTimeField
存储时间信息,而对于该类型的字段,我们经常需要进行基于时间的查询。以下是常用的时间查询方式:
1.1. 精确匹配查询
# 查询某个特定时间
from django.utils import timezone
from myapp.models import Article
time = timezone.now()
result = Article.objects.filter(publish_time=time)
1.2. 时间范围查询
# 查询一段时间内的记录
from django.utils import timezone
from myapp.models import Article
start_time = timezone.make_aware(datetime.datetime(2021, 1, 1))
end_time = timezone.now()
result = Article.objects.filter(publish_time__range=(start_time, end_time))
1.3. 年月日查询
# 查询某一天的记录
from django.utils import timezone
from myapp.models import Article
today = timezone.now().date()
result = Article.objects.filter(publish_time__year=today.year, publish_time__month=today.month, publish_time__day=today.day)
1.4. 同一时间段的聚合统计
# 按月统计记录条数
from django.db.models.functions import ExtractMonth
from django.db.models import Count
from myapp.models import Article
result = Article.objects.annotate(month=ExtractMonth('publish_time')).values('month').annotate(total=Count('id'))
2. 示例说明
示例 1: 查询7天内发布的文章
from django.utils import timezone
from myapp.models import Article
start_time = timezone.now() - timezone.timedelta(days=7)
end_time = timezone.now()
result = Article.objects.filter(publish_time__range=(start_time, end_time))
在这个示例中,我们通过使用 now()
获得当前时间,并跨越 timedelta
对象将时间的范围设定为 7 天,最后使用这个范围进行查询。
示例 2: 按月统计发布的文章数
from django.db.models.functions import ExtractMonth
from django.db.models import Count
from myapp.models import Article
result = Article.objects.annotate(month=ExtractMonth('publish_time')).values('month').annotate(total=Count('id'))
在这个示例中,我们使用 annotate
进行按月分组,使用 values
取出每个月份以及统计结果,最后使用 Count
函数对 id
字段计数,获得每个月发布的文章总数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:django 中使用DateTime常用的时间查询方式 - Python技术站