Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >django查询今天,昨天,一周,分组统计月,年

django查询今天,昨天,一周,分组统计月,年

作者头像
py3study
发布于 2020-08-14 01:40:48
发布于 2020-08-14 01:40:48
2.9K00
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

一、概述

有一个用户表,models.py内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db import models

# Create your models here.
class User(models.Model):   #用户名表
    username = models.CharField(max_length=16,verbose_name="用户名")
    password = models.CharField(max_length=32,verbose_name="密码")
    create_time = models.DateTimeField(auto_now_add=True,verbose_name="创建时间")
    last_time = models.DateTimeField(verbose_name="登录时间")

    class Meta:
        # 多列唯一索引
        unique_together = ('username','create_time')

本文用的是sqlite3数据库,插入初始数据,insert语句如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
INSERT INTO "main"."application_user" ("id", "username", "password", "create_time", "last_time", "ROWID") VALUES (1, 'xiao1', 1234, '2020-01-01 13:14:52', '2020-01-01 13:14:52', 1);
INSERT INTO "main"."application_user" ("id", "username", "password", "create_time", "last_time", "ROWID") VALUES (2, 'xiao2', 1234, '2020-02-02 13:14:52', '2020-02-02 13:14:52', 2);
INSERT INTO "main"."application_user" ("id", "username", "password", "create_time", "last_time", "ROWID") VALUES (3, 'xiao3', 1234, '2020-03-03 13:14:52', '2020-03-03 13:14:52', 3);
INSERT INTO "main"."application_user" ("id", "username", "password", "create_time", "last_time", "ROWID") VALUES (4, 'xiao4', 1234, '2020-04-04 13:14:52', '2020-04-04 13:14:52', 4);
INSERT INTO "main"."application_user" ("id", "username", "password", "create_time", "last_time", "ROWID") VALUES (5, 'xiao5', 1234, '2020-05-05 13:14:52', '2020-05-05 13:14:52', 5);
INSERT INTO "main"."application_user" ("id", "username", "password", "create_time", "last_time", "ROWID") VALUES (6, 'xiao6', 1234, '2020-06-06 13:14:52', '2020-06-06 13:14:52', 6);
INSERT INTO "main"."application_user" ("id", "username", "password", "create_time", "last_time", "ROWID") VALUES (7, 'xiao7', 1234, '2020-07-07 13:14:52', '2020-07-07 13:14:52', 7);
INSERT INTO "main"."application_user" ("id", "username", "password", "create_time", "last_time", "ROWID") VALUES (8, 'xiao8', 1234, '2020-07-23 13:14:52', '2020-07-22 13:14:52', 8);
INSERT INTO "main"."application_user" ("id", "username", "password", "create_time", "last_time", "ROWID") VALUES (9, 'xiao9', 1234, '2020-07-24 13:14:52', '2020-07-22 13:14:52', 9);

需求如下:

1. 查询今天,昨天,一周的用户数。

2. 最近一个月,分组统计每一天的数量

3. 最近1年,分组统计每一个月的数量

二、项目演示

新建一个项目,名字为:test_rom,应用名称为:application

django版本为:3.0.8

settings.py

修改时区,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = False

urls.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.contrib import admin
from django.urls import path
from application import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),
    path('month/', views.month),
    path('year/', views.year),
]

views.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.shortcuts import render
import datetime
from application import models
from django.http import JsonResponse
import time
from dateutil.relativedelta import relativedelta
from django.db.models.functions import TruncMonth,TruncYear,ExtractYear,ExtractMonth
from django.db.models import Count
from django.db import connection

# Create your views here.
def index(request):
    # 今日###############
    today = datetime.datetime.now().date()
    ret = models.User.objects.filter(create_time__gte=str(today) + ' 00:00:00')
    today_len = len(ret)

    # 昨天###############
    yesterday = (datetime.datetime.now() + datetime.timedelta(days=-1)).date()
    ret = models.User.objects.filter(create_time__gte=str(yesterday) + ' 00:00:00',
                                         create_time__lte=str(today) + ' 23:59:59')
    yesterday_len = len(ret)

    # 一周前
    today = datetime.datetime.now().date()
    weekdelta = datetime.datetime.now().date() - datetime.timedelta(weeks=1)
    ret = models.User.objects.filter(create_time__gte=str(weekdelta) + ' 00:00:00',
                                         create_time__lte=str(today) + ' 23:59:59')
    week_len = len(ret)

    # 总数量
    ret = models.User.objects.all()
    total_len = len(ret)

    data = {
        "today": today_len,
        "yesterday": yesterday_len,
        "week": week_len,
        "total": total_len
    }

    return JsonResponse(data)


def month(request):
    # 当前年,月
    this_year = time.strftime("%Y", time.localtime(time.time()))
    this_month = time.strftime("%m", time.localtime(time.time()))

    # 按天分组
    select = {'day': connection.ops.date_trunc_sql('day', 'create_time')}
    count_data = models.User.objects.filter(create_time__year=this_year, create_time__month=this_month).extra(
        select=select).values('day').annotate(number=Count('id'))

    x_list = []
    y_list = []
    for i in count_data:
        x_list.append(i['day'])
        y_list.append(i['number'])

    data = {"x": x_list, "y": y_list}
    return JsonResponse(data)


def year(request):
    # 计算时间
    time_ago = datetime.datetime.now() - relativedelta(years=1)
    # print("time_ago",time_ago)
    # 获取近一年数据
    one_year_data = models.User.objects.filter(create_time__gte=time_ago)
    # 分组统计每个月的数据
    count_res = one_year_data \
        .annotate(year=ExtractYear('create_time'), month=ExtractMonth('create_time')) \
        .values('year', 'month').order_by('year', 'month').annotate(count=Count('id'))

    # 封装数据格式
    month_list = []
    count_list = []
    for i in count_res:
        month_list.append("%s-%s" % (i['year'], i['month']))
        count_list.append(i["count"])

    data = {"month": month_list, "count": count_list}
    return JsonResponse(data)

启动并访问

使用Pycharm直接启动即可,访问首页:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1:8001/index/

效果如下:

访问最近一个月分组数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1:8001/month/

效果如下:

访问最近一年的分组数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1:8001/year/

效果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Django DateTimeField 指定日期筛选(How can I filter a date of a DateTimeField in Django)
models.py class AnchorBindAgent(models.Model): """ 主播绑定到代理,绑定规则 """ end_time_default = (timezone.now() + timezone.timedelta(days=15)).date() agent = models.ForeignKey(verbose_name="代理绑定", to=User, on_delete=models.DO_NOTHING) ancho
卓越笔记
2023/02/18
8760
python 模拟Spring Cloud
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
py3study
2020/03/25
9400
python 模拟Spring Cloud
Django ORM 数据库常用操作
ORM 一对多的使用:: 比如说一个出版社可以出版多本书,但是一本书只能够在一个出版社进行发表,这就是一个典型的一对多的关系,一对多models.ForeignKey(),如下我们首先创建一个Book表,然后创建一个Publish表,一个Publish记录中可以包含多本书.
王 瑞
2022/12/28
7970
Django model select的各种用法详解
Q对象可以对关键字参数进行封装,从而更好的应用多个查询,可以组合&(and)、|(or)、~(not)操作符。
37丫37
2018/08/23
1.2K0
Django之model查select的用法
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
菲宇
2019/10/22
8440
python查询MySQL写入Excel
在基础写法中,需要指定表的字段,比如:['id','username','password','phone','email']
py3study
2020/05/14
9.5K1
python查询MySQL写入Excel
Django入门
一般是用户通过浏览器向服务器发送一个请求(request),首先会去访问视图函数,如果不涉及数据的调用(那么这个时候视图函数返回一个模板,也就是你一个网页给用户),视图函数调用模型,模型去数据库查找数据,然后逐级返回,视图函数把返回的数据填充到模板的空格中,最后返回网页给用户
py3study
2020/02/10
2.3K0
Django Helloworld
【历史故事】似乎Python从诞生起就是各种传奇,Django 从一个非常实际的需求成长而来:World Web 是一家新闻网站,负责在新闻截止期限内建立密集的 Web 应用程序。 在快节奏的新闻编辑室,World Online 往往需要几个小时内将一个复杂的 Web 应用程序从概念推向发布上线。
vanguard
2020/03/04
1.2K0
django rest_framework 用户登录认证
1、安装 pip install djangorestframework 2、创建项目及应用 创建过程略 目录结构如图 3、设置settings.py 设置数据库连接 # MySQL 增加mysql
kirin
2020/05/21
1.1K0
05.Django基础五之django模型层(一)单表操作
      创建名为book的app,在book下的models.py中创建模型:
changxin7
2019/09/29
3.2K0
python 终级篇 django --
                                   一般操作                                             
py3study
2020/01/19
3K0
python 终级篇 django --
django-搭建BBS关键点总结
注意点:如果同时在一个浏览器中打开两个相同的网页,他的code以后的那个网站为准,这是session的特性
小小咸鱼YwY
2019/09/11
6230
Django 之Form表单的常用操作
普通Form表单的提交 <!-- name:index.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/" method="post"> <p>账号:<input type="text" name="username"><span>{{ error.username }}<
王 瑞
2022/12/28
1.2K0
Django之Model世界
django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM)
Wyc
2018/09/11
2.3K0
Django进阶知识
django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM)。
超蛋lhy
2018/08/31
3.8K0
Django学习笔记之Django ORM相关操作
<!-- p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px "PingFang SC"; color: #000000 } span.s1 { } span.s2 { font: 11.0px Helvetica } -->
Jetpropelledsnake21
2019/02/15
3.7K0
Django知识点
一、Django pip3 install django C:\Python35\Scripts # 创建Django工程 django-admin startproject 【工程名称】 mysite - mysite # 对整个程序进行配置 - init - settings # 配置文件
院长技术
2021/02/19
8900
Python Day16 Django
django-admin startproject 项目名 在项目名目录下创建应用 python manage.py startapp blog 在project/settings.py中加入app
py3study
2020/01/10
2K0
Python Day16 Django
Django-官网查询部分翻译(1.11版本文档)-QuerySet-字段查找-06
在 django 中要想创建一个数据对象,只需要实例化他,传入这个表模型类的关键字参数,然后调用 .save() 方法把这个对象保存到数据库中即可
suwanbin
2019/09/26
3K0
Django笔记(十一)实现对数据库的各种操作,比如分组,排序等
那么Django如果实现以上的功能,不仅仅以一个字段进行分组,而且还给查询出的字段起别名
一写代码就开心
2021/11/15
9720
Django笔记(十一)实现对数据库的各种操作,比如分组,排序等
相关推荐
Django DateTimeField 指定日期筛选(How can I filter a date of a DateTimeField in Django)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验