본문 바로가기
python

[python-django] django의 transaction에 대해서 with atomic

by 하이바네 2022. 11. 17.
반응형

django에서 db에 데이터를 입력하게 될 경우 transaction에 대해서 고민을 하게 될 수 있다.

 

일반적인 django 디폴트는 auto commit이다. 그러면 commit 중 에러가 발생한 상황에 대해서 한땀한땀 코드를 짜서 처리를 할수도 있겠지만 atomic을 사용하면 간단히 해결된다.

 

atomic을 사용하는 방법은 두가지로

 

1. 어노테이션(데코레이터)를 사용

from django.db import transaction

@transaction.atomic
def attendance(request):
	#모델에 데이터 저장

다음과 같이 transaction을 추가하고 @transaction.atomic을 넣어주면 데이터를 저장할때 예외가 발생하면 최종적으로 commit을 하지 않고 rollback을 시켜준다. (.save()가 많아도 중간에 하나가 오류나면 전체 다 rollback이 된다)

2. context로 사용

 

Django

The web framework for perfectionists with deadlines.

docs.djangoproject.com

위의 문서에 보면 atomic에 대해서 자세히 나와있다. context로 사용하는 경우의 예를 가져와보면 아래와 같다.

 

from django.db import DatabaseError, transaction

obj = MyModel(active=False)
obj.active = True
try:
    with transaction.atomic():
        obj.save()
except DatabaseError:
    obj.active = False

if obj.active:
    ...

django 프레임워크 자체에서 지원되는 것들이 많아 개발에는 많이 편리한듯 하다. 그러다보니 알아야 되는 것들도 많다.

728x90

댓글