반응형
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
'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 |
댓글