Django的ORM和SQL分别按时间查询数据

在日常工作中经常需要根据时间条件去查询数据,比如多少分钟之前、周几、当天、本月、今年等等,总结Django和sql的查询方法,分享下

1、获取5分钟前的数据

1
2
3
4
5
6
7
#sql方法
select * from 表名 where 时间字段名 >=DATE_SUB(NOW(),INTERVAL 5 MINUTE);
 
#django方法
import datetime
old_time = datetime.datetime.now() + datetime.timedelta(minutes=-5)
modles.table_name.objects.filter(时间字段名__gt=old_time)

2、获取昨天的数据

1
2
3
4
5
6
7
#sql方法
SELECT * FROM  表名 WHERE TO_DAYS(NOW()) - TO_DAYS(时间字段名) = 1;
 
#django方法
import datetime
date = datetime.date() + timedelta(days=-1) # 昨天
modles.table_name.objects.filter(时间字段名=date)

3、查看当天的数据

1
2
3
4
5
6
7
#sql方法
select * from table_name where to_days(create_time) = to_days(now());
 
#django方法
import datetime
current_date = datetime.datetime.now().date()
modles.table_name.objects.filter(时间字段名=current_date)

4、查看本年数据

1
2
3
4
5
6
#sql方法
select * from 表名 where YEAR(时间字段名)=YEAR(NOW());
 
#django方法
import datetime
modles.table_name.objects.filter(时间字段名=datetime.datetime.now().year)

5、查看本月数据

1
2
3
4
5
6
#sql方法
SELECT * FROM 表名 WHERE DATE_FORMAT(时间字段名, '%Y%m') = DATE_FORMAT(CURDATE(),'%Y%m')
 
#django方法
import datetime
modles.talbe_name.objects.filter(时间字段名__month=datetime.datetime.now().month)

6、查看本周数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#sql方法
SELECT * FROM 表名 WHERE YEARWEEK(date_format(时间字段名,'%Y-%m-%d')) = YEARWEEK(now());
 
#django方法
def get_current_week():
    monday= datetime.date.today()
    one_day = datetime.timedelta(days=1)
    while monday.weekday() != 0:
        monday -= one_day
    return monday
 
current_date = datetime.datetime.now()
monday = get_current_week()
current_week_count = modles.table_name.objects.filter(时间字段名__gte=monday)

7、查询时间范围

1
2
3
4
5
6
7
8
9
比如:查询10月10号到10月12号之间
#mysql方法
SELECT * FROM 表名 WHERE 字段 BETWEEN '2021-10-10 00:00:00' AND '2021-10-12 23:59:59.999999'
 
#django方法
import datetime
start_date = datetime.date(2021, 10, 10)
end_date = datetime.date(2021, 10, 12)
modles.table_name.objects.filter(时间字段名__range=(start_date, end_date))

8、查多少天以来的数据

1
2
3
4
5
6
7
8
9
比如查询两天以来
#sql方法:
SELECT * FROM monitor_warn_message where DATE_SUB(CURDATE(), INTERVAL 2 DAY) <= date(create_time);
 
#django方法:
current_date = datetime.datetime.now()
dt_e = datetime.datetime.now().date()
dt_s = (dt_e - datetime.timedelta(2))
modles.table_name.objects.filter(create_time__range=[dt_s,dt_e])

9、查询某年

1
2
3
4
5
6
比如:查询2020
#sql方法
SELECT * FROM `表名` WHERE 字段名 BETWEEN '2020-01-01 00:00:00' AND '2020-12-31 23:59:59.999999'
 
#django方法
modles.table_name.objects.filter(时间字段名__year=2020)

10、查询某月

1
2
3
4
5
#sql方法
SELECT * FROM `monitor_warn_message` WHERE EXTRACT(MONTH FROM 时间字段名) = 月份;
 
#django方法
modles.table_name.objects.filter(时间字段名__month=月份)

11、查询周几

1
2
3
4
5
6
比如查询周二,(默认从周日开始到周六1-7)
#sql方法
SELECT * FROM `表名` WHERE DAYOFWEEK(时间字段名) = 3;
 
#django方法
modles.table_name.objects.filter(时间字段名__week_day=3)

12、查询几号

1
2
3
4
5
6
7
查询几号
比如:查看每个月3号数据
#sql方法
SELECT * FROM `表名` WHERE EXTRACT(DAY FROM 时间字段名) = 3;
 
#django方法
modles.table_name.objects.filter(时间字段名__day=3)

13、查看大于某个时间

1
2
3
4
5
#sql方法
select * from 表名 where 字段名 > '日期时间';
 
#django方法
modles.table_name.objects.filter(时间字段名__gt='日期时间')

14、查看小于某个时间

1
2
3
4
5
#sql方法
select * from 表名 where 字段名 < '日期时间';
 
#django方法
modles.table_name.objects.filter(时间字段名__lt='日期时间')

15、查看大于等于某个时间

1
2
3
4
5
#sql方法
select * from 表名 where 字段名 >= '日期时间';
 
#django方法
modles.table_name.objects.filter(时间字段名__gte='日期时间')

16、查看小于等于某个时间

1
2
3
4
5
#sql方法
select * from 表名 where 字段名 <= '日期时间';
 
#django方法
modles.table_name.objects.filter(时间字段名__lte='日期时间')

  

总结:积累这么多,如果有错的请多多提醒

posted @   lucky_tomato  阅读(1059)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示