zoukankan      html  css  js  c++  java
  • MySQL----python操作数据库练习

    一、多对多的正反向查询

    class Class(models.Model):
        name = models.CharField(max_length=32,verbose_name="班级名")
        course = models.CharField(verbose_name="课程",max_length=32)
        def __str__(self):
            return self.name
    
    class Teacher(models.Model):
        name = models.CharField(max_length=23,verbose_name="姓名")
        classes = models.ManyToManyField(verbose_name="所属班级",to="Class")
        def __str__(self):
            return self.name
    

    题目1:查找小明[老师]所带的班级

    # 方式一:基于对象的查找
          models.Teacher.objects.filter(name="小明").first().classes.all()
          models.Teacher.objects.filter(name="小明").first().classes.values("name")
    # 方式二:基于双下划线的查找
             models.Teacher.objects.filter(name="小明").values("classes__name")

    注意:要说明的是多对多的查询用.all,,查单个的时候用.values或者values_list,不要用obj.classes.name,,这样查到的会是None,反向查询也是如此。

    总结:不管是一对多,还是多对多,要是查询多得一方就得用all()

    表结构

    from django.db import models
    
    # Create your models here.
    # 一个学生有一个班级,一个班级可以有好多学生,所以是
    # 一对多的关系,关联字段放在多的一方
    class Student(models.Model):
        name = models.CharField(max_length=32,verbose_name="姓名")
        age = models.IntegerField(verbose_name="年龄")
        classes = models.ForeignKey(to="Class",verbose_name="所属班级")
        def __str__(self):
            return self.name
    
    class Class(models.Model):
        name = models.CharField(max_length=32,verbose_name="班级名")
        course = models.CharField(verbose_name="课程",max_length=32)
        def __str__(self):
            return self.name
    
    class Teacher(models.Model):
        name = models.CharField(max_length=23,verbose_name="姓名")
        classes = models.ManyToManyField(verbose_name="所属班级",to="Class")
        def __str__(self):
            return self.name

    查询乐乐[同学]在那个班级

     # 方式一:
        print("乐乐[同学]所在的班级",models.Student.objects.filter(name="海燕").values("classes__name"))
        # 方式二:
        obj_cls = models.Student.objects.filter(name="海燕").first()
        print("乐乐[同学]所在的班级",obj_cls.classes.name)
    

    查询乐乐[同学]所在班的老师的姓名(双表)

    models.Student.objects.filter(name="乐乐").values("classes__teacher__name")
    

    查询python班的所有学生的姓名

    models.Class.objects.filter(name="python").values("student__name")
    models.Class.objects.filter(name="python").first().student_set.all().values("name")

      

  • 相关阅读:
    RESTful API 设计指南 (转)
    关于APP接口设计(转)
    申请付费苹果开发者账号 注意事项及流程 (转)
    Excel word “由于本机的限制_该操作已被取消_请与管理员联系”的已生效解决办法 (转 )
    iOS APP提交上架最新流程(转)
    Android 框架练成 教你打造高效的图片加载框架(转)
    intellij idea使用
    Android ImageView的scaleType属性与adjustViewBounds属性(转)
    android 教程实例系列
    打包时报错误调试
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/10614810.html
Copyright © 2011-2022 走看看