#!/usr/bin/env python """ 중복된 Person 데이터를 정리하는 스크립트 """ import os import sys import django # Django 설정 os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'A_core.settings') sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) django.setup() from B_main.models import Person from django.contrib.auth.models import User def clean_duplicates(): """중복된 Person 데이터 정리""" print("=" * 60) print("중복 Person 데이터 정리") print("=" * 60) # 전화번호별로 그룹화 phone_groups = {} for person in Person.objects.all(): if person.연락처: if person.연락처 not in phone_groups: phone_groups[person.연락처] = [] phone_groups[person.연락처].append(person) deleted_count = 0 for phone, persons in phone_groups.items(): if len(persons) > 1: print(f"\n전화번호 {phone}에 대한 중복 발견:") # 회원가입 상태별로 분류 registered = [p for p in persons if p.회원가입상태 == '회원가입'] not_registered = [p for p in persons if p.회원가입상태 == '미가입'] withdrawn = [p for p in persons if p.회원가입상태 == '탈퇴'] print(f" 회원가입: {len(registered)}개") print(f" 미가입: {len(not_registered)}개") print(f" 탈퇴: {len(withdrawn)}개") # 정리 로직 if registered: # 회원가입된 것이 있으면 나머지 삭제 keep_person = registered[0] to_delete = persons[1:] # 첫 번째 것 제외하고 모두 삭제 print(f" 유지: {keep_person.이름} (ID: {keep_person.id}, 회원가입상태: {keep_person.회원가입상태})") for person in to_delete: print(f" 삭제: {person.이름} (ID: {person.id}, 회원가입상태: {person.회원가입상태})") person.delete() deleted_count += 1 elif not_registered: # 미가입만 있으면 첫 번째 것만 유지 keep_person = not_registered[0] to_delete = not_registered[1:] + withdrawn print(f" 유지: {keep_person.이름} (ID: {keep_person.id}, 회원가입상태: {keep_person.회원가입상태})") for person in to_delete: print(f" 삭제: {person.이름} (ID: {person.id}, 회원가입상태: {person.회원가입상태})") person.delete() deleted_count += 1 elif withdrawn: # 탈퇴만 있으면 첫 번째 것만 유지 keep_person = withdrawn[0] to_delete = withdrawn[1:] print(f" 유지: {keep_person.이름} (ID: {keep_person.id}, 회원가입상태: {keep_person.회원가입상태})") for person in to_delete: print(f" 삭제: {person.이름} (ID: {person.id}, 회원가입상태: {person.회원가입상태})") person.delete() deleted_count += 1 print(f"\n총 {deleted_count}개의 중복 데이터가 삭제되었습니다.") # 최종 확인 print("\n최종 중복 확인:") final_phone_counts = {} for person in Person.objects.all(): if person.연락처: final_phone_counts[person.연락처] = final_phone_counts.get(person.연락처, 0) + 1 final_duplicates = {phone: count for phone, count in final_phone_counts.items() if count > 1} if final_duplicates: print("여전히 중복된 전화번호가 있습니다:") for phone, count in final_duplicates.items(): print(f" {phone}: {count}개") else: print("모든 중복이 해결되었습니다.") if __name__ == '__main__': clean_duplicates()