Django Web Framework/Django 일반

django에서 db row lock을 실행할 수 있는 방법

bluebamus 2023. 12. 18.

 - 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()

 

댓글