728x90

ORM 3

[Django] ORM Eager Loading(select related & prefetch_related)

ORM QuerySet의 특징 포스트에 이어서 Eager Loading에 대해 알아보자. 💡 https://dev-jy.tistory.com/23 [Django] QuerySet?! 장고 쿼리셋의 특징 중 Lazy Loading, Caching, Eager Loading에 대해 알아보자. 🤔 Lazy Loading 먼저, ORM은 게으르다. 😴 from prod.models import Product product = Product.objects.fitler(name='제품A') pr.. dev-jy.tistory.com Django ORM은 기본적으로 Lazy Loading 전략을 택하기 때문에, 아래의 예시처럼 N+1문제가 발생할 수 있다. 🤬 from board.models import Board ..

🐍Python | Django 2022.05.15

[Django] QuerySet method

django의 쿼리셋에서 사용할 수 있는 메서드들에 대해 알아보자. SELECT all() 테이블 내의 모든 데이터를 조회하여, 쿼리셋 타입으로 반환해준다. Product.objects.all() # get() 하나의 데이터를 조회하기 위한 메서드이며, 주로 pk로 조회한다. 결과가 1건 이상인 경우 에러를 발생시키고, 객체 타입으로 반환된다. Product.objects.get(id=1) # filter() 특정 조건에 맞는 row들만 조회할 때 사용하고, 쿼리셋으로 반환된다. Product.objects.filter(Group_id = 1) # exclude() 특정 조건을 제외한 데이터만 조회하고 싶을 때 사용한다. 쿼리셋으로 반환된다. Product.objects.exclude(Group_id =..

🐍Python | Django 2022.05.12

[Django] QuerySet?!

장고 쿼리셋의 특징 중 Lazy Loading, Caching, Eager Loading에 대해 알아보자. 🤔 Lazy Loading 먼저, ORM은 게으르다. 😴 from prod.models import Product product = Product.objects.fitler(name='제품A') print(product) 위와 같은 코드를 작성한 후 실행해보면, 실제 DB hits는 몇 번 일어날까? 정답은 1번이다. filter 할 때는 DB hits가 일어나지 않고 마지막 'print(product)'에서 DB hits가 일어난다. 장고 ORM은 QuerySet이 evaluated 될 때까지, 실제로 DB에 접근해 쿼리를 실행하지 않는다. 그렇다면 QuerySet이 evaluated 되는 시점은..

🐍Python | Django 2022.05.12
728x90