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使用shelve模块实现简单数据存储的方法
May 20 Python
Python创建xml文件示例
Mar 22 Python
python负载均衡的简单实现方法
Feb 04 Python
python清除字符串中间空格的实例讲解
May 11 Python
利用python修改json文件的value方法
Dec 31 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
对python中的装包与解包实例详解
Aug 24 Python
Python实现手机号自动判断男女性别(实例解析)
Dec 22 Python
深入理解Tensorflow中的masking和padding
Feb 24 Python
pytorch中index_select()的用法详解
Jan 06 Python
基于flask实现五子棋小游戏
May 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
JS实现php的伪分页
2008/05/25 PHP
php实现memcache缓存示例讲解
2013/12/04 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
2014/06/23 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
javascript 获取图片尺寸及放大图片
2013/09/04 Javascript
jquery $.each 和for怎么跳出循环终止本次循环
2013/09/27 Javascript
js中typeof的用法汇总
2013/12/12 Javascript
js登录弹出层特效
2014/03/07 Javascript
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
JS验证逗号隔开可以是中文字母数字
2016/04/22 Javascript
详细讲解JavaScript中的this绑定
2016/10/10 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
简单了解JavaScript异步
2019/05/23 Javascript
js遍历详解(forEach, map, for, for...in, for...of)
2019/08/28 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
微信小程序如何获取地址
2019/12/24 Javascript
python遍历类中所有成员的方法
2015/03/18 Python
Python使用scrapy采集时伪装成HTTP/1.1的方法
2015/04/08 Python
简单谈谈Python中的json与pickle
2017/07/19 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
对python_discover方法遍历所有执行的用例详解
2019/02/13 Python
用pycharm开发django项目示例代码
2019/06/13 Python
python集合能干吗
2020/07/19 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
法学院方阵解说词
2014/01/29 职场文书
结婚保证书
2015/01/16 职场文书
回门宴新娘答谢词
2015/09/29 职场文书