본문 바로가기
Django

django query

by 이농이능 2018. 3. 28.

Django에서 쿼리셋 효과적으로 사용하기


http://raccoonyy.github.io/using-django-querysets-effectively-translate/




tree_set = Tree.objects.filter(type="deciduous")

# exists()는 쿼리셋 캐시를 만들지 않으면서 레코드가 존재하는지 검사한다
if tree_set.exists():
    # DB에서 가져온 레코드가 하나도 없다면
    # 트래픽과 메모리를 절약할 수 있다
    print("There are still hardwood trees in the world!")
star_set = Star.objects.all()

# iterator() 메서드는 전체 레코드의 일부씩만 DB에서 가져오므로
# 메모리를 절약할 수 있다.
for star in star_set.iterator():
    print(star.name)


exists()와 iterator()를 함께 사용하면, DB에 두 개의 쿼리를 실행하고 그 결과를 쿼리셋 캐시로 생성하는 일을 방지할 수 있다.


molecule_set = Molecule.objects.all()

# 첫 번째 쿼리로, 쿼리셋에 레코드가 존재하는지 확인한다
if molecule_set.exists():
    # 또다른 쿼리로 레코드를 조금씩 가져온다
    for molecule in molecule_set.iterator():
        print(molecule.velocity)