반응형
sqlite3 테이블에서 중복값을 찾는 Python 예제코드입니다.
2023. 12. 3 최초작성
2024. 3. 7 에러처리 코드 추가
중복을 검사할 테이블을 생성합니다.
import sqlite3 database_file_path = 'zodiac.db' table_name = 'zodiac' try: conn = sqlite3.connect(database_file_path) cursor = conn.cursor() print("Database connection successful!") except sqlite3.Error as e: print(f"Database connection failed: {e}") exit() cursor = conn.cursor() query = f'DROP TABLE {table_name}' try: cursor.execute(query) print("Table delection successful!") except sqlite3.Error as e: print(f"Table delection failed: {e}") # 테이블을 생성합니다. query = f''' CREATE TABLE IF NOT EXISTS {table_name} ( year INTEGER PRIMARY KEY, animal TEXT ) ''' try: cursor.execute(query) print("Table creation successful!") except sqlite3.Error as e: print(f"Table creation failed: {e}") conn.close() exit() cursor.execute(f'INSERT INTO {table_name} (year, animal) VALUES (?, ?)', (2000, '용')) cursor.execute(f'INSERT INTO {table_name} (year, animal) VALUES (?, ?)', (2002, '말')) cursor.execute(f'INSERT INTO {table_name} (year, animal) VALUES (?, ?)', (2012, '용')) conn.commit() query = f'SELECT * FROM {table_name}' try: cursor.execute(query) except sqlite3.Error as e: print(f"select execution failed : {e}") results = cursor.fetchall() cursor.close() conn.close() for result in results: print(result) |
실행하면 다음처럼 용이 2번 포함되어 있습니다.
Database connection successful!
Table delection failed: no such table: zodiac
Table creation successful!
(2000, '용')
(2002, '말')
(2012, '용')
다음 코드를 사용하여 animal 컬럼에 용이 두번 중복된 것을 찾습니다.
import sqlite3 database_file_path = 'zodiac.db' # 데이터베이스 파일 이름입니다. table_name = 'zodiac' # 테이블 이름입니다. column_name = 'animal' # 중복값을 찾을 컬럼 이름입니다. try: conn = sqlite3.connect(database_file_path) cursor = conn.cursor() print("Database connection successful!") except sqlite3.Error as e: print(f"Database connection failed: {e}") exit() cursor = conn.cursor() try: cursor.execute(f""" SELECT {column_name}, COUNT(*) FROM {table_name} GROUP BY {column_name} HAVING COUNT(*) > 1 """) # 데이터베이스에서 특정 테이블(table_name)의 특정 열(column_name)에 대해 중복된 값을 찾는 쿼리를 실행합니다. # 지정된 열에서 중복된 값과 그 값이 테이블에서 나타나는 횟수를 반환합니다. # # 1. SELECT {column_name}, COUNT(*) : 선택한 열(column_name)의 값과 해당 값이 테이블에 나타나는 횟수를 선택합니다. # 2. FROM {table_name} : 쿼리가 실행될 테이블(`table_name`)을 지정합니다. # 3. GROUP BY {column_name} : column_name의 모든 고유 값에 대해 그룹을 만들고, 각 그룹 내에서 해당 값이 나타나는 횟수를 계산합니다. # 4. HAVING COUNT(*) > 1 : 그룹화된 결과 중에서 해당 값이 한 번 이상 나타나는 경우만 선택합니다. 즉, 중복된 값을 찾는 데 사용됩니다. # 중복된 값이 있는지 결과를 가져옵니다. duplicates = cursor.fetchall() # 중복된 값이 있으면 출력합니다. if duplicates: print("중복된 값이 있습니다:") for dup in duplicates: print(f"값 {dup[0]} 는 {dup[1]}번 중복되었습니다.") else: print("중복된 값이 없습니다.") except sqlite3.Error as e: print(f"데이터베이스 오류 발생: {e}") finally: conn.close() |
실행 결과 용이라는 값이 2번 중복되었다는 것을 출력합니다.
중복된 값이 있습니다:
값 용 는 2번 중복되었습니다.
첫번째 코드를 수정하여 다음 2개의 값만 테이블에 저장하도록 변경해봅니다.
(2000, '용')
(2002, '말')
두번째 코드를 사용하여 중복을 검사하면 다음처럼 중복된 값이 없다고 출력됩니다.
중복된 값이 없습니다.
반응형
'Python > sqlite3' 카테고리의 다른 글
sqlite3 테이블에서 데이터를 검색하는 Python 예제코드 (0) | 2024.03.07 |
---|---|
sqlite3 테이블에 있는 레코드 하나를 랜덤으로 보여주는 Python 예제 (0) | 2024.03.07 |
sqlite3 테이블에 있는 레코드 개수 세는 Python 예제코드 (0) | 2024.03.07 |
sqlite3 테이블의 스키마(schema)를 출력하는 Python 예제코드 (0) | 2024.03.07 |
sqlite3 테이블에 데이터 삽입하는 Python 예제코드 (0) | 2024.03.07 |