Django多表连接查询方法

一、Django多表连接是怎么实现的?

对于这个问题小白将举一个多对1的例子给大家讲解,首先要准备好需要用的软件

vs code,navicat数据库图形化工具。

二、建立连接

1、定义模型类,并建立1对多关系

(1)学院模型

class department(models.Model):  # 学院

    dm_id = models.CharField('学院编号', max_length=12, primary_key=True)

    dm_name = models.CharField('学院名', unique=True, max_length=32)

    dm_dean = models.CharField('主任', max_length=32)

    dm_phone = models.CharField('电话', max_length=32)  

(2)学生模型 

其中外键是department_name

class student(models.Model):  # 学生 与学院、专业是(多对1)

    stu_id = models.CharField('学号', max_length=12, primary_key=True)

    stu_name = models.CharField('姓名', max_length=32)

    stu_sex = models.BooleanField('性别', choices=((0, '女'), (1, '男')))

    stu_age = models.IntegerField('年龄')

    department_name = models.ForeignKey(

        "department", on_delete=models.SET_NULL,to_field='dm_name', verbose_name='学院', null=True)  # 学院名 学院的外键,to_field='dm_name'是指定外键关联的是'dm_name'

    major_name = models.ForeignKey(

        "major", on_delete=models.SET_NULL,to_field='major_name', null=True, verbose_name='专业')  # 专业名 专业的外键

    stu_class = models.CharField(max_length=64, verbose_name='班级')

    stu_phone = models.CharField('电话', max_length=32)

    stu_address = models.CharField('地址', max_length=32)

    stu_email = models.EmailField('邮箱', default=None)

    password = models.CharField('密码', max_length=32,default='1234')   # 默认为空   唯一值

2.数据库迁移

python manage.py makemigrations

python manage.py migrate 

详细的数据库连接、迁移 见以下链接:

http://t.csdn.cn/WSB86

 三、多表查询

1、查询所有学生所在学院的学院编号、学院姓名

在views.py中的查询方法如下:

    stu=student.objects.all().select_related("department_name")

    for i in stu:

        print(i.stu_id,i.department_name.dm_id,i.department_name.dm_name,i.department_name)

 select_related("department_name")使用这样一个方式查询, department_name是学生表关联的外键名, 最终 通过for循环输出,其中i.department_name变成了department object (d004)类型,不再是学生表的学院名称了

结果如下:

Django多表连接查询方法_第1张图片


2、 查询学号为1的同学的姓名,学院名,学院编号

在views.py中的查询方法如下:

    stu=student.object.sselect_related("major_name").get(stu_id=1)

    print(i.stu_id,i.department_name.dm_id,i.department_name.dm_name,i.department_name)

总结

以上就是今天要讲的内容,本文仅仅展现了简单的多表查询。

你可能感兴趣的:(Mysql,python,开发语言,django,mysql)