zoukankan      html  css  js  c++  java
  • django ORM模型

    1.orm模型的使用

    1.在ORM模型中contains和icontains都是查找目标中包含老师字符串的,唯一的区别是icontains对大小写不敏感,而contains对大小写是敏感的

    Teacher.objects.filter(name__contains='老师') Teacher.objects.filter(name__icontains='老师')

    2.在ORM模型中exact和iexact绝大多数情况下是相等的:

    (1)exact在底层会被翻译成=

    (2)iexact在底层会被翻译成like

    Teacher.objects.filter(name__exact='老师1')
    Teacher.objects.filter(name__iexact='老师1')

    3.在ORM模型中id__in=用于查询多个符合条件的结果,返回一个queryset类型

    Student.objects.filter(name__in=['学生1','学生2','学生100'])

    4.在ORM也可以关联查询,例如:想查找“学生1”科目的所有成绩,首先是要查询成绩所以要以分数表来当做目标开始查询

    Score.objects.filter(student__name='学生1')
    #如果只想要查询学生1的python课程的成绩可以使用:Score.objects.filter(student__name='学生1', course__name='python')

    5.比较查询条件:

    gt:大于
    gte:大于等于
    lt:小于
    lte:小于等于

    6.startswith和istartwith判断某个字段的值是否是以某个值开始的。前面大小写敏感。后面大小写不敏感。示例代码如下:

    articles = Article.objects.filter(title__startswith='hello')
    '''
    以上代码的意思是提取所有标题以hello字符串开头的文章。
    将翻译成以下SQL语句:
    '''
    select ... where title like 'hello%'

    7.endswith和iendswith用法同上,判断用以什么字母结尾endswith大小写敏感,iendswith大小写不敏感

    用法同上

    8.range是区间查找,以下代码表示查找id在2和4之间的数据,类似sql语句的between...and...

    Student.objects.filter(id__range=[2,4])

    9.regex和iregex为正则表达式查询,前者都大小写敏感,后者大小写不敏感

    Article.objects.filter(title__regex=r'^hello')
    '''
    以上代码的意思是提取所有标题以hello字符串开头的文章。
    将翻译成以下的SQL语句:
    '''
    select ... where title regexp binary '^hello';

    2.聚合函数

    1.Avg函数,求平均值,需要以下命令导入,返回来的是一个字典

    from django.db.models import Avg
    #查询所有学生的平均成绩可以用以下代码:
    avg_score = Score.objects.aggregate(Avg('number'))
    print(avg_score)
    
    #要查询某个同学的平均成绩可以用以下代码:
    s = Score.objects.filter(student__name='学生1')
    res = s.aggregate(Avg('number'))
    
    #要查询全班学生的平均成绩:
    s = Score.objects.all()
    res = s.aggregate(avg=Avg('number'))#返回字典的key就是avg

    2.Count函数,求个数,需要以下命令导入,返回来的是一个字典

    from django.db.models import Count
    #求student这个表里有多少个学生
    num = Student.objects.aggregate(Count('id'))
    print(num)

     3.MaxMin:获取指定对象的最大值和最小值。比如想要获取Author表中,最大的年龄和最小的年龄分别是多少。那么可以通过以下代码来实现:

    from django.db.models import Max,Min
    result = Author.objects.aggregate(Max('age'),Min('age'))

    4.Sum:求指定对象的总和。比如要求图书的销售总额。那么可以使用以下代码实现:

    from djang.db.models import Sum
     result = Book.objects.annotate(total=Sum("bookstore__price")).values("name","total")

    5.aggregate和annotate的区别:

      1. aggregate:返回使用聚合函数后的字段和值。

      2. annotate:在原来模型字段的基础之上添加一个使用了聚合函数的字段,并且在使用聚合函数的时候,会使用当前这个模型的主键进行分组(group by)。
        比如以上Sum的例子,如果使用的是annotate,那么将在每条图书的数据上都添加一个字段叫做total,计算这本书的销售总额。
        而如果使用的是aggregate,那么将求所有图书的销售总额。

  • 相关阅读:
    javascript:让表单 文本框 只读,不可编辑的方法
    javascript从url中获取请求参数
    jQuery 效果函数,jquery文档操作,jQuery属性操作方法,jQuerycss操作函数,jQuery参考手册-事件,jQuery选择器
    IIS中添加MIME类型
    谷歌工作方法流程相关4本书
    发财、升职带来的幸福感很快会消失,量化研究幸福的5+3本书
    棉纺织品的历史就是工业革命和资本主义的历史:5星|《棉花帝国:一部资本主义全球史》(上)
    (严重剧透)被川岛芳子包养的民国老军医:3.5星|麦家《人生海海》
    3星|《医疗创业与投资启示录》:相关资料汇编
    3星|秦朔《文明寻思录第三辑》:时事点评文集,观点多事实少
  • 原文地址:https://www.cnblogs.com/fengzi7314/p/10393261.html
Copyright © 2011-2022 走看看