Django Web Framework/Django 일반
django에서 db row lock을 실행할 수 있는 방법
bluebamus
2023. 12. 18. 15:22
- DB 행(lock)은 여러 클라이언트가 동시에 동일한 데이터를 수정하는 것을 방지하기 위해 사용됩니다.
- Django에서 DB 행(lock)을 실행하는 방법은 크게 두 가지입니다:
1. select_for_update() 메서드 사용:
- select_for_update() 메서드는 Django ORM에서 제공하는 메서드로, 특정 쿼리에 대해 행(lock)을 설정할 수 있습니다.
- 해당 메서드를 사용하여 특정 행을 선택하고, 다른 트랜잭션이 해당 행을 수정하는 것을 막을 수 있습니다.
- 다음은 select_for_update() 메서드의 예시입니다:
from django.db import transaction
with transaction.atomic():
# 특정 행을 선택하여 lock을 설정
locked_row = MyModel.objects.select_for_update().get(id=1)
# lock이 설정된 행에 대한 수정 작업 수행
locked_row.field = 'new value'
locked_row.save()
2. 트랜잭션 사용:
- Django에서 제공하는 트랜잭션을 사용하여 DB 행(lock)을 설정할 수 있습니다.
- transaction.atomic() 데코레이터나 transaction.atomic() 컨텍스트 매니저를 사용하여 트랜잭션 범위를 설정하고, 해당 범위 내에서 특정 행을 선택하고 수정 작업을 수행할 수 있습니다.
- 다음은 트랜잭션을 사용하여 DB 행(lock)을 설정하는 예시입니다:
from django.db import transaction
with transaction.atomic():
# 특정 행을 선택하여 lock을 설정
locked_row = MyModel.objects.select_for_update().get(id=1)
# lock이 설정된 행에 대한 수정 작업 수행
locked_row.field = 'new value'
locked_row.save()