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遍历zip文件输出名称时出现乱码问题的解决方法
Apr 08 Python
python fabric实现远程部署
Jan 05 Python
python3爬取各类天气信息
Feb 24 Python
Windows上使用Python增加或删除权限的方法
Apr 24 Python
基于python代码实现简易滤除数字的方法
Jul 17 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
Apr 01 Python
PyCharm中代码字体大小调整方法
Jul 29 Python
python 递归调用返回None的问题及解决方法
Mar 16 Python
python线程池如何使用
May 28 Python
python求numpy中array按列非零元素的平均值案例
Jun 08 Python
深入了解NumPy 高级索引
Jul 24 Python
pycharm 2020 1.1的安装流程
Sep 29 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语法(1)
2006/10/09 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
jQuery 性能优化指南(2)
2009/05/21 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
JS保留两位小数 四舍五入函数的小例子
2013/11/20 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
浅谈angularjs中响应回车事件
2017/04/24 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
2017/09/20 jQuery
vue.js实现简单轮播图效果
2017/10/10 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
详解Vue-axios 设置请求头问题
2018/12/06 Javascript
利用React Router4实现的服务端直出渲染(SSR)
2019/01/07 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
wxpython 学习笔记 第一天
2009/03/16 Python
Python中正则表达式的用法实例汇总
2014/08/18 Python
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
详解如何用django实现redirect的几种方法总结
2018/11/22 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
使用matplotlib绘制图例标签中带有公式的图
2019/12/13 Python
python str字符串转uuid实例
2020/03/03 Python
python实现图像拼接功能
2020/03/23 Python
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
尤妮佳moony海外旗舰店:日本殿堂级纸尿裤品牌
2018/02/23 全球购物
荷兰的时尚市场:To Be Dressed
2019/05/06 全球购物
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
工商管理专业职业生涯规划
2014/01/01 职场文书
公司授权委托书
2014/04/04 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
公司向个人借款协议书范本
2014/10/09 职场文书