> 데이터 베이스 > MySQL 튜토리얼 > 원시 SQL 없이 Django에서 할당된 자원 봉사자가 없는 부서를 효율적으로 쿼리하려면 어떻게 해야 합니까?

원시 SQL 없이 Django에서 할당된 자원 봉사자가 없는 부서를 효율적으로 쿼리하려면 어떻게 해야 합니까?

Barbara Streisand
풀어 주다: 2025-01-02 19:16:44
원래의
887명이 탐색했습니다.

How Can I Efficiently Query for Departments with No Assigned Volunteers in Django Without Raw SQL?

LEFT JOIN Django ORM: 원시 SQL 쿼리의 대안

질문:

고려하세요. 다음 모델:

class Volunteer(models.Model):
    ...

class Department(models.Model):
    ...

class DepartmentVolunteer(models.Model):
    ...
로그인 후 복사

할당된 자원봉사자가 없는 모든 부서를 쿼리하려면 다음 SQL 문을 사용할 수 있습니다.

SELECT
    d.name
FROM
    vsp_department AS d
LEFT JOIN
    vsp_departmentvolunteer AS dv
ON
    d.id = dv.department_id
WHERE
    dv.department_id IS NULL;
로그인 후 복사

이 쿼리를 수행하는 데 더 Django와 유사한 방법이 있습니까? , 아니면 원시를 고수해야합니까? SQL?

답변:

Django는 filter() 메서드를 사용하여 동일한 쿼리를 수행하는 보다 간결하고 표현력이 풍부한 방법을 제공합니다.

qs = Department.objects.filter(
    departmentvolunteer__isnull=True).values_list('name', flat=True)
로그인 후 복사

이 쿼리는 Django 문서에 설명된 대로 Department와 DepartmentVolunteer 간의 다중 값 관계에 걸쳐 있습니다. https://docs.djangoproject.com/en/stable/topics/db/queries/#spanning-multi-valued-relationships

Django에서 생성된 결과 쿼리는 다음과 같습니다.

SELECT
    "app_department"."name"
FROM
    "app_department" LEFT OUTER JOIN "app_departmentvolunteer"
ON
    ("app_department"."id" = "app_departmentvolunteer"."department_id")
WHERE
    "app_departmentvolunteer"."id" IS NULL
로그인 후 복사

이 접근 방식을 사용하면 원시 SQL이 필요하지 않으며 읽기 쉽고 유지 관리하기 쉬운 쿼리가 제공됩니다.

위 내용은 원시 SQL 없이 Django에서 할당된 자원 봉사자가 없는 부서를 효율적으로 쿼리하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿