django ORM之values和annotate使用详解


Posted in Python onMay 19, 2020

任务需求:项目中有个问题表,存储所有的问题,以_id为编号,由于_id未做唯一校验,所以早期数据有多个问题使用同一编号的情况。

需求就是找出编号有重复的数据,只保留第一个

开始之前

使用了values和annotate两个函数

简单的来说values可以理解成展示models指定列的值

annotate起到了group by的作用,

所以我做的事就是对指定字段按个数进行统计,然后留下重复编号的数据,进行清洗

看看数据库数据

django ORM之values和annotate使用详解

查看每条数据的_id的值

django ORM之values和annotate使用详解

对_id数据条数进行统计

django ORM之values和annotate使用详解

转换数据格式为list

django ORM之values和annotate使用详解

Emmm。。。我只需要重复数据,所以把_id唯一的数据剔除

写个简单的遍历

django ORM之values和annotate使用详解

然后只需要找到这些数据,对每个_id只留下第一条数据

导出sql,做个备份,开始删除数据

最终处理:

django ORM之values和annotate使用详解

删除过程:

django ORM之values和annotate使用详解

再回到网站看看数据清洗后的效果

django ORM之values和annotate使用详解

补充知识:django中annotate的一点使用方法

annotate 使用方法:

有时候我们需要连接两个表做一些查询,比如博客中有两个模型,一个文章模型,一个分类模型,分类模型是文章中的分类字段的外键,如果我们需要查询每个分类下文章的数量,最简单的方法就是先将所有分类查到:

categories = NewsCategory.objects.all()

文章模型名称为News

然后每个分类django都会自动给你添加一个属性category.news_set,这个方法就可以拿到分类对应的文章,然后category.news_set.count()就可以拿到每个分类有多少个文章了。

但是这个方法很低级啊,如果想高级一点,查询性能更优化,annotate了解一下

现在就可以对上面的查询方法进行优化了。

categories = NewsCategory.objects.annotate(num_count=Count('news'))

annotate中其实是给categories(Queryset)添加了一个属性,Queryset中的每个对象都会有这么一个属性

现在可以这样查询分类下的文章数量:

category.num_count()

将代码贴出来

原先的代码:

def cms_news_category(request):
 categories = NewsCategory.objects.all()
 context = {
  'categories': categories
 }
 return render(request, 'cms/category.html', context=context)
 
 模板category.html中的代码:
 {% for category in categories %}
  <td>{{ category.name }}</td>
  <td>{{ category.news_set.count }}</td>
 {% endfor %}

使用annotate后的代码:

def cms_news_category(request):
 categories = NewsCategory.objects.annotate(num_count=Count('news'))
 context = {
  'categories': categories
 }
 return render(request, 'cms/category.html', context=context)
 模板category.html中的代码: 
 {% for category in categories %}
  <td>{{ category.name }}</td>
  <td>{{ category.num_count }}</td>
 {% endfor %}

以上这篇django ORM之values和annotate使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
跟老齐学Python之编写类之一创建实例
Oct 11 Python
Python3.x对JSON的一些操作示例
Sep 01 Python
Django中的CBV和FBV示例介绍
Feb 25 Python
python实现抖音视频批量下载
Jun 20 Python
解决python报错MemoryError的问题
Jun 26 Python
python使用多进程的实例详解
Sep 19 Python
在Python中给Nan值更改为0的方法
Oct 30 Python
python 函数中的内置函数及用法详解
Jul 02 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
django实现HttpResponse返回json数据为中文
Mar 27 Python
Python selenium使用autoIT上传附件过程详解
May 26 Python
利用Python将list列表写入文件并读取的方法汇总
Mar 25 Python
基于python实现地址和经纬度转换
May 19 #Python
Python Django form 组件动态从数据库取choices数据实例
May 19 #Python
Django自关联实现多级联动查询实例
May 19 #Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
May 19 #Python
django 数据库返回queryset实现封装为字典
May 19 #Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
May 19 #Python
python 数据分析实现长宽格式的转换
May 18 #Python
You might like
PHP 图片水印类代码
2012/08/27 PHP
php实现俄罗斯乘法实例
2015/03/07 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
一段实用的php验证码函数
2016/05/19 PHP
PHP Filter过滤器全面解析
2016/08/09 PHP
javascript 闭包疑问
2010/12/30 Javascript
javascript实现tabs选项卡切换效果(自写原生js)
2013/03/19 Javascript
JavaScript bold方法入门实例(把指定文字显示为粗体)
2014/10/17 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
基于jQuery实现二级下拉菜单效果
2016/02/01 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
微信小程序 聊天室简单实现
2017/04/19 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
VUE前端cookie简单操作
2017/10/17 Javascript
vue中使用cookies和crypto-js实现记住密码和加密的方法
2018/10/18 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
2020/07/28 Javascript
[02:35]DOTA2英雄基础教程 末日使者
2013/12/04 DOTA
教你用Python创建微信聊天机器人
2020/03/31 Python
对python的文件内注释 help注释方法
2018/05/23 Python
python应用文件读取与登录注册功能
2019/09/23 Python
Python综合应用名片管理系统案例详解
2020/01/03 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
协程Python 中实现多任务耗资源最小的方式
2020/10/19 Python
如何用canvas实现在线签名的示例代码
2018/07/10 HTML / CSS
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
总经理职责范文
2013/11/08 职场文书
电子信息毕业生自荐信
2013/11/16 职场文书
集团公司总经理岗位职责
2013/12/20 职场文书
医院办公室主任职责
2013/12/29 职场文书
平安建设工作方案
2014/06/02 职场文书
学校师德师风整改方案
2014/10/28 职场文书
分居协议书范本
2014/11/03 职场文书
居住证明范文
2015/06/17 职场文书
安全教育培训制度
2015/08/06 职场文书
2015年中秋放假通知范文
2015/08/18 职场文书