[Django] update_or_create란?

김효일·2024년 11월 23일

update_or_create란

이름 그대로 특정 객체를 업데이트하거나 없으면 새로 생성하는 ORM 메서드이다. 주로 중복 방지와 간결한 코드 작성을 위해 사용된다.

사용법

Model.objects.update_or_create(defaults=None, **kwargs)

kwargs: 객체를 검색하는 데 사용하는 조건
defaults: 객체를 업데이트하거나 새로 생성할 때 사용할 기본 값

예제

from django.contrib.auth.models import User

user, created = User.objects.update_or_create(
    username="johndoe",
    defaults={"email": "johndoe@example.com", "is_active": True}
)

if created:
    print("새 사용자가 생성되었습니다.")
else:
    print("기존 사용자가 업데이트되었습니다.")

)
  • username="johndoe" 조건으로 객체 검색
  • 객체가 있으면 email과 is_active 필드 업데이트
  • 객체가 없으면 username="johndoe", "email": "johndoe@example.com", "is_active": True로 새 객체 생성

리턴값

  • 객체 (obj): 업데이트되거나 새로 생성된 모델 객체.
  • created (bool): 객체가 생성되었는지 여부 (True이면 생성, False이면 업데이트).

주의할 점

  • update_or_create는 atomic 트랜잭션을 사용한다. 따라서 다중 스레드 환경에서 안전하게 사용할 수 있다. 하지만, 고도로 동시성이 높은 환경에서 여전히 race condition이 발생할 수 있으므로 조심해야 한다.
  • defaults에 지정되지 않은 필드는 업데이트되지 않고, 기존 값을 유지한다.
  • 객체를 먼저 검색한 후 업데이트/생성을 수행하므로 데이터베이스에 추가적인 부하가 있을 수 있다.
  • kwargs로 전달한 필드는 모델에서 unique 해야 한다.
profile
기록을 통한 성장

0개의 댓글