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脚本来控制Windows Azure的简单教程
Apr 16 Python
python函数局部变量用法实例分析
Aug 04 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
May 25 Python
python3实现字符串的全排列的方法(无重复字符)
Jul 07 Python
Python3.5装饰器原理及应用实例详解
Apr 30 Python
python实现生成Word、docx文件的方法分析
Aug 30 Python
python使用socket 先读取长度,在读取报文内容示例
Sep 26 Python
Python小整数对象池和字符串intern实例解析
Mar 21 Python
Django 实现对已存在的model进行更改
Mar 28 Python
python小程序之4名牌手洗牌发牌问题解析
May 15 Python
python 实现音频叠加的示例
Oct 29 Python
Python深度学习之实现卷积神经网络
Jun 05 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中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
PHP无刷新上传文件实现代码
2011/09/19 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
php多线程实现方法及用法实例详解
2015/10/26 PHP
Yii框架应用组件用法实例分析
2020/05/15 PHP
javascript日期对象格式化为字符串的实现方法
2014/01/14 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
2015/03/03 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
js实现的页面矩阵图形变换特效
2016/01/26 Javascript
深入理解逻辑表达式的用法 与或非的用法
2016/06/06 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
webpack常用配置总览(小结)
2019/11/18 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
用C++封装MySQL的API的教程
2015/05/06 Python
Python实现读取文件最后n行的方法
2017/02/23 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
Pycharm 如何一键加引号的方法步骤
2021/02/05 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
美国轮胎网站:Priority Tire
2018/11/28 全球购物
会计实习生工作总结的自我评价
2013/10/07 职场文书
应届生求职简历的自我评价怎么写
2013/10/23 职场文书
中学实习教师自我鉴定
2013/12/12 职场文书
教师年度考核评语
2014/04/28 职场文书
三好学生评语大全
2014/12/29 职场文书
小学校长个人总结
2015/03/03 职场文书
CAD实训总结范文
2015/08/03 职场文书
学风建设主题班会
2015/08/17 职场文书
Mysql中 unique列插入重复值该怎么解决呢
2021/05/26 MySQL