任务需求:项目中有个问题表,存储所有的问题,以_id为编号,由于_id未做唯一校验,所以早期数据有多个问题使用同一编号的情况。
需求就是找出编号有重复的数据,只保留第一个
开始之前
使用了values和annotate两个函数
简单的来说values可以理解成展示models指定列的值
annotate起到了group by的作用,
所以我做的事就是对指定字段按个数进行统计,然后留下重复编号的数据,进行清洗
看看数据库数据
查看每条数据的_id的值
对_id数据条数进行统计
转换数据格式为list
Emmm。。。我只需要重复数据,所以把_id唯一的数据剔除
写个简单的遍历
然后只需要找到这些数据,对每个_id只留下第一条数据
导出sql,做个备份,开始删除数据
最终处理:
删除过程:
再回到网站看看数据清洗后的效果
补充知识: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使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]