Django

Django ORM 고급

Raw SQL, custom managers, query expressions, database functions, atomic transactions, select_for_update, race conditions, database routers

28 면접 질문·
Senior
1

Django에서 raw SQL을 실행할 때 Model.objects.raw()와 connection.cursor()의 주요 차이점은 무엇입니까?

답변

Model.objects.raw()는 자동으로 매핑된 모델 인스턴스를 반환하여 속성 접근 및 관계와 같은 ORM의 이점을 유지합니다. connection.cursor()는 튜플 형태의 raw 데이터베이스 커서를 반환하여 특정 모델에 묶이지 않은 쿼리에 더 많은 유연성을 제공하지만, 결과를 수동으로 처리해야 합니다.

2

Django에서 모델에 직접 메서드를 추가하는 대신 custom Manager를 만드는 주요 이점은 무엇입니까?

답변

custom Manager는 테이블 수준의 쿼리 로직을 캡슐화하여 QuerySet과의 메서드 체이닝을 가능하게 하고, 모델이 사용되는 모든 곳에서 이 로직을 재사용할 수 있게 합니다. 모델 메서드는 개별 인스턴스에 대해 동작합니다. Manager는 get_queryset()으로 기본 QuerySet을 수정할 수도 있습니다.

3

Django에서 사용자 정의 메서드의 체이닝을 가능하게 하려면 custom QuerySet을 어떻게 구현합니까?

답변

체이닝을 가능하게 하려면 self 또는 필터링된 QuerySet을 반환하는 메서드를 가진 QuerySet 상속 클래스를 만들어야 합니다. 그런 다음 Manager.from_queryset()을 통해 custom QuerySet을 사용하거나, custom QuerySet을 반환하는 get_queryset()을 가진 사용자 정의 Manager를 정의합니다. 이를 통해 Model.objects.custom_method().filter()를 호출할 수 있습니다.

4

race condition 위험 없이 데이터베이스의 카운터를 원자적으로 증가시키려면 어떤 Django 표현식을 사용합니까?

5

transaction.atomic()의 기능은 무엇이며 Django에서 예외를 어떻게 처리합니까?

+25 면접 질문

다음 면접을 위해 Django을 마스터하세요

모든 질문, flashcards, 기술 테스트, 코드 리뷰 연습, 면접 시뮬레이터에 접근하세요.

무료로 시작하기