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通过apply使用元祖和列表调用函数实例
May 26 Python
Python中MySQL数据迁移到MongoDB脚本的方法
Apr 28 Python
Python探索之SocketServer详解
Oct 28 Python
python 设置文件编码格式的实现方法
Dec 21 Python
Python使用reportlab模块生成PDF格式的文档
Mar 11 Python
Django之无名分组和有名分组的实现
Apr 16 Python
记录Python脚本的运行日志的方法
Jun 05 Python
python递归调用中的坑:打印有值, 返回却None
Mar 16 Python
如何在django中运行scrapy框架
Apr 22 Python
python能在浏览器能运行吗
Jun 17 Python
python 读取、写入txt文件的示例
Sep 27 Python
Python爬虫之Selenium实现关闭浏览器
Dec 04 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
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
PHP加密解密实例分析
2015/12/25 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
2018/12/06 PHP
Javascript实现重力弹跳拖拽运动效果示例
2013/06/28 Javascript
NodeJS url验证(url-valid)的使用方法
2013/11/18 NodeJs
JavaScript网页定位详解
2014/01/13 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
js创建对象的方式总结
2015/01/10 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
javascript运算符——位运算符全面介绍
2016/07/14 Javascript
js注入 黑客之路必备!
2016/09/14 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
详解vue 2.6 中 slot 的新用法
2019/07/09 Javascript
React+TypeScript+webpack4多入口配置详解
2019/08/08 Javascript
JavaScript代码模拟鼠标自动点击事件示例
2020/08/07 Javascript
使用python生成目录树
2018/03/29 Python
python实现Virginia无密钥解密
2019/03/20 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
2019/10/30 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
Python代码执行时间测量模块timeit用法解析
2020/07/01 Python
django restframework serializer 增加自定义字段操作
2020/07/15 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
携程英文网站:Trip.com
2017/02/07 全球购物
千禧酒店及度假村官方网站:Millennium Hotels and Resorts
2019/05/10 全球购物
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
如何用Java判断一个文件或目录是否存在
2012/11/19 面试题
维修工先进事迹
2014/05/29 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
三严三实学习心得体会
2014/10/13 职场文书
理想国读书笔记
2015/06/25 职场文书
七年级生物教学反思
2016/02/20 职场文书
python3 hdf5文件 遍历代码
2021/05/19 Python