ホームページ > データベース > mysql チュートリアル > Django ORM Left Join を使用して、ボランティアが割り当てられていない部門を効率的にクエリするにはどうすればよいですか?

Django ORM Left Join を使用して、ボランティアが割り当てられていない部門を効率的にクエリするにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-28 06:26:11
オリジナル
760 人が閲覧しました

How Can I Efficiently Query for Departments Without Assigned Volunteers Using Django ORM Left Joins?

Django ORM での左結合

複雑なデータベース関係を扱う場合、関連レコードの有無。これを行う手法の 1 つは、左結合として知られています。

次のモデルがあるとします。

class Volunteer(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)    
    email = models.CharField(max_length=50)
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES)


class Department(models.Model):
    name = models.CharField(max_length=50, unique=True)
    overseer = models.ForeignKey(Volunteer, blank=True, null=True)
    location = models.CharField(max_length=100, null=True)


class DepartmentVolunteer(models.Model):
    volunteer = models.ForeignKey(Volunteer)
    department = models.ForeignKey(Department)
    assistant = models.BooleanField(default=False)
    keyman = models.BooleanField(default=False)
    captain = models.BooleanField(default=False)
    location = models.CharField(max_length=100, blank=True, null=True)
ログイン後にコピー

ボランティアが割り当てられていないすべての部門をクエリしたいとします。 。次の生の 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 は次のとおりです。

qs = Department.objects.filter(
    departmentvolunteer__isnull=True).values_list('name', flat=True)
ログイン後にコピー

次に示すように、生成されたクエリは生の SQL クエリとほぼ同じになります。

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
ログイン後にコピー

このメソッドにより、次のことが可能になります。 Django ORM の機能を活用しながら効率的にデータをクエリし、生の SQL と比較してより Python 的で保守しやすいアプローチを提供します。

以上がDjango ORM Left Join を使用して、ボランティアが割り当てられていない部門を効率的にクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート