Django models save()에 update_fields를 사용 해야하는 이유

2022. 11. 28. 19:39·Programming
반응형

Django ORM 

Django의 ORM은 SQL문을 사용하지 않고도 아주 손쉽게 조회, 생성, 수정, 삭제 할 수 있다.

 

Save( ) Method

작동 방법

오늘 정리해 볼 주제는 바로 우리가 자주 사용하는 save() method이다.

값을 수정할 때 자주 쓰는 method인데 어떻게 작동하는지 최근에야 알게 되었다.

 

save() method는 호출 할 때 해당 테이블의 모든 열이 업데이트 된다.

설명글 보다는 코드로 직접 예시를 들어 설명하는 것이 이해에 도움이 될 것같아 아래 코드를 첨부했다.

 

예를 들어 아래와 같은 User Table이 있다고 해보자.

from django.db import models

class User(models.Model):
  name = models.CharField(max_length=255, verbose_name='이름')
  email = models.EmailField(max_length=255, unique=True, verbose_name='이메일')
  is_admin = models.BooleanField(default=False, verbose_name='관리자 여부')

 

ID가 1인 사용자의 이름을 변경하려고 한다면 아래와 같이 코드를 작성할 수 있다.

>>> user = User.objects.get(id=1)
>>> user.name = "홍길동"
>>> user.save()

 

위의 코드를 실행했을 때 실제 DB의 Query는 다음과 같다.

UPDATE "user"
SET    "name" = '홍길동',
       "email" = 'example@email.com',
       "is_admin" = FALSE
WHERE  "id" = 1

 

수정하고자 한 컬럼은 이름 하나 뿐이었는데, 테이블에 존재하는 모든 컬럼이 불러와져 업데이트 된다.

이게 뭐가? 할 수도 있지만 만약 30개가 넘는 컬럼으로 구성되어있는 테이블에 대해 위와 같이 작성한 save() method를 여러번 반복해서 실행 시킨다면 어떤가? 불필요한 Query 실행으로 오버헤드가 발생 할 것이다.

 

오버헤드란?
Time spent doing "not-useful" work.
오버헤드란 프로그램의 실행 흐름에서 나타나는 현상 중 하나로 예를 들어, 프로그램의 실행 흐름 도중에 동떨어진 위치의 코드를 실행시켜야 할 때, 추가적으로 시간/메모리/자원이 사용되는 현상입니다.
한마디로 정의하자면, 오버헤드는 특정 기능을 수행하는데 드는 간접적인 시간, 메모리 등의 자원을 말한다.

효율적인 사용법 

이를 해결하기 위한 방법은 아주 간단하다.

save() method에 update_fields 인자 값을 아래와 같이 넣어 사용해주면 된다.

>>> user = User.objects.get(id=1)
>>> user.name = "홍길동"
>>> user.save(update_fields=['name'])

 

update_fields를 사용했을 때 실행되는 Query는 아래와 같다.

UPDATE "user"
SET    "name" = '홍길동',
WHERE  "user"."id" = 1

사용하지 않을 이유가 전혀 없는 꿀팁이다 \\ ^ ^ //

 

 

 

 

더보기

참조

https://donggu1105.tistory.com/175

https://www.sankalpjonna.com/learn-django/save-your-django-models-using-update-fields-for-better-performance

반응형
'Programming' 카테고리의 다른 글
  • [Python] 제어 구조 : IF 구문
  • JS 필수 문법 정리
  • 다들 Git Flow 쓰고 계신가요?
  • 유닉스 커맨드 라인(부제: 검은화면 정복하기)
기록하기-
기록하기-
  • 기록하기-
    꾸밈없이 끊임없이
    기록하기-
  • 전체
    오늘
    어제
    • 분류 전체보기
      • Programming
      • Episode
  • 블로그 메뉴

    • 깃허브
    • 링크드인
  • 링크

    • Github
    • LinkedIn
  • 공지사항

  • 인기 글

  • 태그

    파이썬
    파이썬 문법
    파이썬문법
    파이썬기초
    python 기초 문법
    파이썬 기초
    Django
    python
    python class
    Python 문법
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
기록하기-
Django models save()에 update_fields를 사용 해야하는 이유
상단으로

티스토리툴바