django外键-left join

本文介绍如何在 Django 中创建 Model 模型,并演示了 ForeignKey 的使用及如何进行连表查询。此外,还详细讲解了 select_related 和 prefetch_related 的区别,以及如何通过调整 ForeignKey 设置来实现 LEFT JOIN 查询。
创建model模型
from django.db import models

class Category(models.Model):
    name = models.CharField(max_length=100)

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    # to是指向你的表,带上引号你关联的表位置可以在此表之后,不带关联的表就必须在前
    # DO_NOTHING表示删除互相不做操作
    category = models.ForeignKey(to="Category", to_field="name ",  on_delete=models.DO_NOTHING,
    							related_name="category")
连表查询
# 查询所有书的类别为言情的
# 只需在外键字段加上双下划线,在加上查询此表的字段即可
Article.objects.filter(category__name="言情")

# 查询类别为言情的所有书名
# 在model类名上加上_set即可
queryset = Category.objects,filter(name="言情")
queryset.article_set.all()
select_related和prefetch_related

select_related:

# 使用方法
Article.objects.all().select_related("category")
# 直接按照model方式这样查询,sql使用的inner join的查询,会导致没有关联的查询不出来

# 当腰使用left join时将外键改成以下
category = models.ForeignKey(to="Category", to_field="name",  on_delete=models.DO_NOTHING,
    							related_name="category", null=True)
本文主要是讲述如何使用left join的查询方式,前期使用select_related的时候刚好这里没有加null=True,执行的sql是inner join的方式;mysql上又设置了外键可为空,导致正式使用的时候那些外键为空的没有查询到…后面在网上一直未找到方法(也可能找寻的方式有误),后面一直琢磨看pycharm的sql出现了left join的语句,才发现加个null=True就能实现…记录下
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值