首页 > 数据库 > mysql教程 > 如何在没有原始 SQL 的情况下在 Django 中高效查询没有分配志愿者的部门?

如何在没有原始 SQL 的情况下在 Django 中高效查询没有分配志愿者的部门?

Barbara Streisand
发布: 2025-01-02 19:16:44
原创
886 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板