Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 MySQL 테이블의 레코드를 삭제하는 방법 (DELETE FROM 완벽 가이드)

데이터베이스 작업을 하다 보면 테이블에서 특정 행(row)을 삭제해야 하는 경우가 종종 발생합니다. 예를 들어, 한 반 학생들의 정보를 담은 테이블이 있다고 가정해 보겠습니다. 한 학생이 반이나 학교를 옮기게 되면 더 이상 그 학생의 정보가 필요하지 않습니다. 이럴 때 해당 학생의 행, 즉 레코드를 테이블에서 삭제해야 합니다.

MySQL에서는 DELETE FROM 문을 사용하여 테이블의 행이나 레코드를 삭제할 수 있습니다. 이때 WHERE 절을 함께 사용하면 삭제할 대상 행을 지정할 수 있습니다. 만약 WHERE 절 없이 DELETE 문을 실행하면 테이블의 모든 레코드가 삭제되므로 각별히 주의해야 합니다.

문법(Syntax)

모든 행 삭제하기

DELETE FROM table_name

특정 행만 삭제하기

DELETE FROM table_name WHERE condition

Python에서 MySQL을 사용해 레코드를 삭제하는 단계

  • MySQL 커넥터 모듈을 임포트(import)한다

  • connect() 메서드로 데이터베이스와 연결을 설정한다

  • cursor() 메서드로 커서 객체를 생성한다

  • 적절한 SQL 문을 사용해 쿼리를 작성한다

  • execute() 메서드로 SQL 쿼리를 실행한다

  • commit() 메서드로 변경 사항을 커밋한다

  • 데이터베이스 연결을 종료한다

예를 들어 다음과 같은 "Student" 테이블이 있다고 가정해 보겠습니다.

+----------+---------+-----------+------------+
|   Name   |  Class  |   City    |   Marks    |
+----------+---------+-----------+------------+
|   Karan  |    4    | Amritsar  |     95     |
|   Sahil  |    6    | Amritsar  |     93     |
|   Kriti  |    3    | Batala    |     88     |
|  Khushi  |    9    | Delhi     |     90     |
|   Kirat  |    5    | Delhi     |     85     |
+----------+---------+-----------+------------+

예제 코드

위 테이블에서 이름이 "Kriti"인 학생의 레코드를 삭제하고 싶다고 가정해 보겠습니다.

import mysql.connector

db = mysql.connector.connect(host="your host", user="your username", password="your password", database="database_name")

cursor = db.cursor()

query = "DELETE FROM Students WHERE Name='Kriti'"
cursor.execute(query)
db.commit()

query = "SELECT * FROM Students"
cursor.execute(query)
for row in cursor:
    print(row)

db.close()

위 코드는 테이블에서 해당 행을 삭제한 뒤, 남아 있는 나머지 행들을 모두 출력합니다.

실행 결과

('Karan', 4, 'Amritsar', 95)
('Sahil', 6, 'Amritsar', 93)
('Khushi', 9, 'Delhi', 90)
('Kirat', 5, 'Delhi', 85)

추가 팁: SQL 인젝션 방지를 위한 파라미터화된 쿼리

실무 환경에서는 삭제 조건값을 문자열에 직접 삽입하기보다 파라미터화된 쿼리(parameterized query)를 사용하는 것이 안전합니다. 이렇게 하면 SQL 인젝션 공격을 예방할 수 있습니다.

query = "DELETE FROM Students WHERE Name=%s"
cursor.execute(query, ("Kriti",))

주의사항

위 코드에서 db.commit() 부분은 매우 중요합니다. commit()은 테이블에 가해진 변경 사항을 실제 데이터베이스에 반영(저장)하는 역할을 합니다. commit()을 호출하지 않으면 DELETE 쿼리가 실행되더라도 변경 사항이 적용되지 않으므로, 데이터 수정 작업 후에는 반드시 commit()을 호출해야 합니다.