반응형
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로 사용
위의 문서에 보면 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
'python' 카테고리의 다른 글
[python-django]multi databases를 사용하는 방법 (0) | 2022.11.24 |
---|---|
[python-django] logging 활성화 (0) | 2022.11.22 |
[python-django]스케쥴러(apschedular 사용) (0) | 2022.11.15 |
[python-django]summernote 설치방법 - extra(Admin에 적용) (0) | 2022.11.04 |
[python-django] 세션 저장 및 삭제 (0) | 2022.11.02 |
댓글