首頁 > 資料庫 > 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查詢的替代方案

問題:

考慮下列models:

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)
登入後複製

此查詢跨越Department 和DepartmentVolunteer 之間的多值關係,如Django 文件所述: 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板