rollback() 메서드는 파이썬에서 데이터베이스 트랜잭션을 처리할 때 사용하는 핵심 메서드 중 하나입니다. 이 글에서는 rollback() 메서드의 개념, 문법, 그리고 실제 활용 예제까지 자세히 살펴보겠습니다.
rollback() 메서드란?
rollback() 메서드는 데이터베이스에 대한 마지막 변경 사항이나 커밋(commit)을 되돌리는 데 사용됩니다. 데이터베이스에 적용한 변경 내용이 만족스럽지 않거나, 트랜잭션 실행 중 오류가 발생해 실패하는 경우 rollback() 메서드를 호출하여 변경 이전의 원래 상태로 데이터베이스를 복원할 수 있습니다.
트랜잭션이 실패했을 때 데이터베이스의 무결성(integrity)을 지켜주는 역할을 하기 때문에, 안정적인 데이터베이스 애플리케이션을 개발할 때 반드시 알아야 할 중요한 메서드입니다. 일반적으로 commit() 메서드와 짝을 이루어 사용되며, 성공 시에는 commit()으로 변경 사항을 확정하고, 실패 시에는 rollback()으로 변경 사항을 취소하는 패턴으로 활용됩니다.
문법
db.rollback()
여기서 db는 데이터베이스 연결 객체(connection object)를 의미합니다.
파이썬에서 MySQL 테이블의 실패한 트랜잭션을 롤백하는 단계
- MySQL 커넥터(mysql.connector)를 임포트합니다.
- connect() 메서드를 사용해 데이터베이스와 연결을 설정합니다.
- cursor() 메서드로 커서 객체를 생성합니다.
- 업데이트 쿼리를 실행하고 변경 사항을 커밋합니다.
- 트랜잭션이 실패하면 예외 처리 블록에서 롤백을 수행합니다.
- 작업이 끝나면 연결을 종료합니다.
예제 코드
아래 코드는 STUDENT 테이블에서 이름이 'Inder'인 학생의 AGE 값을 23으로 업데이트하려고 시도합니다. 트랜잭션이 성공하면 업데이트가 반영되고, 실패하면 트랜잭션이 롤백되어 데이터베이스가 이전 상태로 복원됩니다.
import mysql.connector
from mysql.connector import Error
from mysql.connector import errorcode
try:
db = mysql.connector.connect(
host='localhost',
database='database_name',
user='user_name',
password='your_password',
)
cs = db.cursor()
query = "UPDATE STUDENT SET AGE = 23 WHERE Name ='Inder'"
cs.execute(query)
# 데이터베이스에 변경 사항 커밋
db.commit()
# 업데이트 성공 메시지 출력
print("Database Updated !")
except mysql.connector.Error as error:
# 오류 내용과 함께 업데이트 실패 메시지 출력
print("Database Update Failed !: {}".format(error))
# 예외 발생으로 인해 변경 사항 되돌리기(롤백)
db.rollback()
# 데이터베이스 연결 해제
db.close()
실행 결과
트랜잭션이 성공한 경우:
Database Updated!
트랜잭션이 실패한 경우:
Database Update Failed!
정리
rollback() 메서드는 try-except 구문과 함께 사용하면 강력한 오류 처리 전략이 됩니다. 쿼리 실행 중 예외가 발생하면 except 블록에서 rollback()을 호출해 부분적으로만 반영된 변경 사항을 깨끗하게 되돌릴 수 있으며, 이를 통해 데이터베이스가 항상 일관된 상태를 유지하도록 보장할 수 있습니다.