트랜잭션이란?
트랜잭션(Transaction)이란 데이터베이스의 상태를 변경하는 작업의 단위를 의미
트랜잭션 작업이 정상적으로 완료되면 데이터베이스에 반영 (commit)
트랜잭션 중 일부 작업이 실패한다면 실행 전으로 되돌아감 (rollback)
트랜잭션은 크게 4가지의 성질을 가짐
- 원자성 (Atomicity) : 트랜잭션 내용이 모두 반영되거나, 전부 취소되거나
- 일관성 (Consistency) : 트랜잭션 수행 전과 수행 후의 상태가 같아야 함
- 독립성 (Isolation) : 트랜잭션 진행 중 다른 트랜잭션에서 참조 불가
- 지속성 (Durablility) : 완료된 트랜잭션의 결과는 시스템이 고장나도 영구적으로 반영되어야 함
예제 소스 코드 1. Decorator 방식
# User 수정
@transaction.atomic()
def patch(self, request):
# Hobby parameters
hobby_name = request.data.get("hobby_name",'')
# User parameters
email = request.data.get('email', '')
password = request.data.get('password','')
# UserProfile parameters
nickname = request.data.get('nickname', '')
# Hobby
hobby_obj, is_hobby_obj = Hobby.objects.get_or_create(name = hobby_name)
user = User.objects.filter(email=email)
user.update(password=password)
UserProfile.objects.filter(user=user[0]).update(
user = user[0], nickname = nickname, hobby = hobby_obj,
)
return Response({'message':'User 정보 수정 OK'}, status=status.HTTP_200_OK)
예제 소스 코드 2. with 구문 방식
with transaction.atomic():
# Hobby
hobby_obj, is_hobby_obj = Hobby.objects.get_or_create(name = hobby_name)
user = User.objects.filter(email=email)
user.update(password=password)
UserProfile.objects.filter(user=user[0]).update(
user = user[0], nickname = nickname, hobby = hobby_obj,
)
'Python > Django' 카테고리의 다른 글
[Django] Django CORS 설정하기 (0) | 2022.06.30 |
---|---|
[Django] Pure Django vs DRF (Django Rest Framework) (0) | 2022.06.28 |
[Django] User 모델 작성 방법 비교 (AbstractUser vs AbstractBaseUser) (0) | 2022.06.19 |
[Django] CBV (클래스 기반 View) vs FBV (함수 기반 View) (0) | 2022.06.19 |
[Django] ORM Queryset API - 메소드 정리 (0) | 2022.06.15 |