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

Python으로 데이터베이스 레코드 업데이트하기 — MySQL UPDATE 문 완벽 가이드

데이터베이스에서 UPDATE 연산이란 이미 저장되어 있는 하나 이상의 레코드(행)의 값을 수정하는 작업을 의미합니다. Python에서는 MySQLdb 모듈을 사용해 SQL의 UPDATE 문을 실행함으로써 손쉽게 데이터를 갱신할 수 있습니다.

UPDATE 연산의 기본 개념

UPDATE 문은 WHERE 절과 함께 사용하여 특정 조건을 만족하는 레코드만 선택적으로 수정할 수 있습니다. 만약 WHERE 절을 생략하면 테이블의 모든 레코드가 변경되므로 주의해야 합니다.

예제: 남성 회원 나이 1살 증가시키기

다음 예제는 SEX(성별) 필드 값이 'M'인 모든 레코드를 찾아 해당 회원들의 AGE(나이)를 1살씩 증가시키는 코드입니다.

#!/usr/bin/python
import MySQLdb

# 데이터베이스 연결 열기
db = MySQLdb.connect("localhost", "testuser", "test123", "TESTDB")

# cursor() 메서드로 커서 객체 준비
cursor = db.cursor()

# 갱신할 레코드를 위한 SQL 쿼리 준비
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 \
       WHERE SEX = '%c'" % ('M')

try:
    # SQL 명령 실행
    cursor.execute(sql)
    # 변경 사항을 데이터베이스에 커밋
    db.commit()
except:
    # 오류 발생 시 롤백
    db.rollback()

# 서버와의 연결 종료
db.close()

코드 단계별 설명

1. 데이터베이스 연결: MySQLdb.connect() 메서드에 호스트명, 사용자명, 비밀번호, 데이터베이스 이름을 인자로 전달하여 연결을 생성합니다.

2. 커서 생성: cursor() 메서드를 통해 SQL 문을 실행할 수 있는 커서 객체를 만듭니다.

3. SQL 실행 및 커밋: execute()로 UPDATE 문을 실행한 후, commit()을 호출해야 변경 사항이 실제 데이터베이스에 반영됩니다.

4. 예외 처리: 실행 중 오류가 발생하면 rollback()을 호출하여 트랜잭션을 원래 상태로 되돌려 데이터 일관성을 유지합니다.

5. 연결 종료: 작업이 끝나면 반드시 close()로 연결을 닫아 리소스를 해제합니다.

커밋(commit)과 롤백(rollback)의 중요성

MySQL은 기본적으로 트랜잭션을 지원하며, Python DB API는 트랜잭션이 커밋된 경우에만 변경 결과를 확정합니다. 따라서 INSERT, UPDATE, DELETE 같은 데이터 변경 작업 후에는 반드시 commit()을 호출해야 하며, 그렇지 않으면 다른 세션에서 변경 내용을 확인할 수 없습니다.

보안 팁: 매개변수화된 쿼리 사용 권장

위 예제처럼 문자열 포매팅(%)으로 SQL을 직접 구성하면 SQL 인젝션 공격에 취약할 수 있습니다. 실무에서는 다음과 같이 매개변수화된 쿼리를 사용하는 것이 안전합니다.

sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = %s"
cursor.execute(sql, ('M',))

이 방식은 드라이버가 값을 안전하게 이스케이프 처리해 주기 때문에 보안성과 코드 가독성이 모두 향상됩니다.