django ORM之 values和annotate使用

django ORM之 values和annotate使用

任务需求:项目中有个问题表,存储所有的问题,以_id为编号,由于_id未做唯一校验,所以早期数据有多个问题使用同一编号的情况。

需求就是找出编号有重复的数据,只保留第一个


开始之前

使用了values和annotate两个函数

简单的来说values可以理解成展示models指定列的值

annotate起到了group by的作用,

所以我做的事就是对指定字段按个数进行统计,然后留下重复编号的数据,进行清洗


  1. 看看数据库数据
django ORM之 values和annotate使用
  1. 查看每条数据的_id的值
django ORM之 values和annotate使用
  1. 对_id数据条数进行统计
django ORM之 values和annotate使用
  1. 转换数据格式为list
django ORM之 values和annotate使用

Emmm。。。我只需要重复数据,所以把_id唯一的数据剔除

  1. 写个简单的遍历
django ORM之 values和annotate使用
  1. 然后只需要找到这些数据,对每个_id只留下第一条数据

  2. 导出sql,做个备份,开始删除数据

最终处理:

django ORM之 values和annotate使用

删除过程:

django ORM之 values和annotate使用

再回到网站看看数据清洗后的效果

django ORM之 values和annotate使用