zoukankan      html  css  js  c++  java
  • Django再次练习orm语句

    请配合https://www.cnblogs.com/Guishuzhe/p/9524790.html使用

    models.py

    from django.db import models
    
    
    class ClassTable(models.Model):
        """班级"""
        id = models.AutoField(primary_key=True)
        caption = models.CharField(max_length=32)
    
        def __str__(self):
            return self.caption
    
    
    class Student(models.Model):
        """学生"""
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32, verbose_name="学生名字")
        gender_choices = ((1, ""), (2, ""))
        gender = models.IntegerField(choices=gender_choices, verbose_name="性别")
        classb = models.ForeignKey(to="ClassTable", verbose_name="班级")
    
        def __str__(self):
            return self.name
    
    
    class Teacher(models.Model):
        """老师"""
        id = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32, verbose_name="老师名字")
        students = models.ManyToManyField(to="Student")
        classb = models.ManyToManyField(to="ClassTable")
    
        def __str__(self):
            return self.name
    
    
    class Course(models.Model):
        """课程表"""
        id = models.AutoField(primary_key=True)
        cname = models.CharField(max_length=32, verbose_name="课程名称")
        teacher = models.ForeignKey(to="Teacher", verbose_name="老师", on_delete=models.CASCADE)
    
        def __str__(self):
            return self.cname
    
    
    class Score(models.Model):
        """成绩表"""
        id = models.AutoField(primary_key=True)
        number = models.IntegerField()
        student = models.ForeignKey(to="Student", verbose_name="学生")
        course = models.ForeignKey(to="Course", verbose_name="课程")
    
        def __str__(self):
            return self.number
    View Code

    xx.py
    from app01 import models
    from django.db.models import Avg, Sum, Max, Min, Count, F, Q, Value
    from django.db.models.functions import Concat
    
    # 查询体育课的成绩
    # val = models.Course.objects.values("score__number").filter(score__id=2)
    # # print(val)
    # 查询学生成绩高于80的人数
    # val = models.Course.objects.values("score__student").filter(score__number__gt=80)
    # print(val)
    # 查询生物课程的学生成绩
    # val = models.Student.objects.filter(score__course__cname="生物").values("score__number")
    # val = models.Course.objects.filter(id=1).values("score__number")
    # 查询物理课程的学生成绩
    # val = models.Course.objects.filter(id=3).values("teacher__students").values("score__number")
    # 查询生物/物理课学生的平均成绩
    # val = models.Course.objects.filter(id=1).values("teacher__students").aggregate(Avg("score__number"))
    # val = models.Course.objects.filter(id=3).values("teacher__students").aggregate(Avg("score__number"))
    # 分别查询所有课程平均成绩和最大最小成绩
    # val = models.Course.objects.all().aggregate(Avg("score__number"), Max("score__number"), Min("score__number"))
    # 查询每个部门的平均成绩
    # val = models.Course.objects.values("cname").annotate(avg=Avg("score__number")).values("cname", "avg")
    # 按课程查询每个课程的最大分数和最小分数
    # val = models.Course.objects.values("cname").annotate(max=Max("score__number"), min=Min("score__number")).values("cname", "max", "min")
    # 查询老师下面的所有学生的平均成绩
    # val = models.Teacher.objects.values("students").annotate(avg=Avg("students__score__number")).values("students", "avg")
    # 查询每个班级的平均分数
    # val = models.ClassTable.objects.values("caption").annotate(avg=Avg("student__score__number")).values("caption", "avg")
    # 查询班级学生名字叫钢蛋或者小王八的班级
    # val = models.ClassTable.objects.filter(Q(student__name="钢蛋")|Q(student__name="小王八"))
    # 查询班级上名字叫小五并且老师不是波多的班级
    # val = models.ClassTable.objects.filter(Q(student__name="小五") & ~Q(teacher__name="波多")).values_list("caption")
    # 查询课程是生物或课程名字带物,教师名字到苍的老师("哈哈")
    # val = models.Teacher.objects.filter(Q(course__cname="生物") | Q(course__cname__contains="物"), name__contains="苍")
    # 把所有班级后面都加上(阳光小学)
    # val = models.ClassTable.objects.all().update(caption=Concat(F("caption"), Value("("), Value("阳光小学"), Value(")")))
    # 吧id=2的成绩提高22(支持+ - * /)
    val = models.Score.objects.filter(id=2).update(number=F("number")+22)
    print(val)
    View Code


  • 相关阅读:
    nacos 使用笔记
    mongodb 操作笔记
    maven 编译指定模块
    linux Java 手动GC 手动回收垃圾
    mysql 严格模式取消 group by 和 date zore
    MyBatis SpringBoot2.0 数据库读写分离
    JAVA 解密pkcs7(smime.p7m)加密内容 ,公钥:.crt 私钥:.pem 使用Bouncy Castle生成数字签名、数字信封
    mysql 创建函数或者存储过程,定义变量报错
    zabbix server源码安装
    zabbix准备:php安装
  • 原文地址:https://www.cnblogs.com/Guishuzhe/p/9784439.html
Copyright © 2011-2022 走看看