django orm에서 중복 레코드를 삭제하는 방법은 다음과 같습니다.
- 중복 레코드를 삭제하려면 먼저 중복 조건을 정의해야 합니다.
예를 들어, name과 age 필드가 모두 같은 레코드를 중복으로 간주한다면, filter(name__exact=F(‘age’))와 같이 filter() 함수에 Q 객체나 F 표현식을 사용할 수 있습니다 - 중복 조건에 맞는 레코드들의 id를 values_list() 함수로 추출합니다. 이때 flat=True 옵션을 주면 id 값들이 리스트 형태로 반환됩니다. 예를 들어, ids = Person.objects.filter(name__exact=F(‘age’)).values_list(‘id’, flat=True)와 같이 사용할 수 있습니다.
- 중복 조건에 맞는 레코드들 중에서 하나만 남기고 나머지는 삭제합니다.
이때 delete() 함수에 pk__in 파라미터로 id 리스트를 전달하고, 슬라이싱을 사용하여 하나만 제외할 수 있습니다. 예를 들어, Person.objects.filter(pk__in=ids[1:]).delete()와 같이 사용할 수 있습니다.
예제코드
# django orm에서 중복 레코드 삭제하기
from django.db.models import Q, F
from blog.models import Person
# name과 age 필드가 모두 같은 레코드를 중복으로 간주
duplicates = Person.objects.filter(name__exact=F('age'))
# 중복 레코드들의 id를 리스트로 추출
ids = duplicates.values_list('id', flat=True)
# 중복 레코드들 중에서 하나만 남기고 나머지는 삭제
Person.objects.filter(pk__in=ids[1:]).delete()
'IT > 파이썬' 카테고리의 다른 글
파이썬 - 바이트 배열을 정수형 변환 코드 예제 (0) | 2023.04.25 |
---|---|
Django ORM - Q 객체, F 객체 사용 (0) | 2023.04.18 |
파이썬 라이브러리 패키지 업데이트 방법 - 한꺼번에 여러개 (0) | 2021.11.17 |
CircuitPython - UART read / write 시리얼 읽고 쓰기 (0) | 2021.08.19 |
vscode git bash terminal 에서 파이썬 버전 변경 실행 (0) | 2021.08.10 |