zoukankan      html  css  js  c++  java
  • Django 学习笔记之四 QuerySet常用方法

      QuerySet是一个可遍历结构,它本质上是一个给定的模型的对象列表,是有序的。

      1、建立模型:

      

      2、数据文件(test.txt)

      

      3、文件数据入库(默认的sqlite3)

      入库之前执行 数据库同步命令。具体的参照:Django 学习笔记之二 基本命令 中同步数据库

       

      4、查询方法

        其中要用到values(*fields), filter(**kwargs), exclude(**kwargs)order_by(*fields)

        1、 查询Author 表中数据记录条数

         Author.objects.count()  类似 SQL:select count(*) from Author

        2、查询Author 表中数据所有数据

        Author.objects.values()  类似 SQL:select * from Author

        3、查询查询Author 表中 name,age,birth三列的数据

        Author.objects.values('name','age','sex') 类似 SQL:select name,age,sex from Author

        4、查询name='mike' 姓名,性别,年龄及出生日期等数据

        Author.objects.values('name','age','sex','birth').filter(name='mike') 

        类似 SQL:select name,age,sex,birth from Author where name ='mike'

        5、查询age =40的人的姓名,性别,及出生日期信息

        Author.objects.values('name','sex','birth').filter(age=40)

        类似 SQL:select name,sex,birth from Author where age =40

        6、查询age >40、age <40和age !=40的人的姓名,性别,及出生日期信息 ,主要大于、小于、不等于分别用__gt、__lt、exclude

        Author.objects.values('name','sex','birth').filter(age__gt=40)    age >40 类似 SQL:select name,sex,birth from Author where age >40

        Author.objects.values('name','sex','birth').filter(age__lt=40)     age <40 类似 SQL:select name,sex,birth from Author where age <40

        Author.objects.values('name','sex','birth').exclude(age = 40)  age !=40 类似 SQL:select name,sex,birth from Author where age !=40

        

        出错的原因是age和__gt之间不能有空格,__gt和后面的数据可以有空格

        7、查询name !='mike' 并且age!=20的信息。

        Author.objects.values('name','age').exclude(name='mike',age=20)

        类似 SQL:select name,sex from Author where name !='mike' and age !=40

        8、查询name = 'mike' 并且age = 20的信息

        Author.objects.values('name','age').filter(name='mike',age=20)

        类似 SQL:select name,sex from Author where name ='mike' and age =40

      5、查询并排序

        1、查询name 和age 并按照age升序

        Author.objects.values('age','name').order_by('age')  

        select age,name form Author order by age

         2、查询name 和age 并按照age降序

        Author.objects.values('age','name').order_by('-age')

        select age,name form Author order by age desc

         3、查询name 和age,并按照name,age升序

        Author.objects.values('age','name').order_by('name','age')

        select age,name form Author order by name, age

         4、查询name 和age,并按照name,age降序  降序,在字段前面加个-

        Author.objects.values('age','name').order_by('-name','-age')

        select age,name form Author order by name, age desc

        5、查询name 和age,并按照name升序, age降序  

        Author.objects.values('age','name').order_by('name','-age')

        select age,name form Author order by name asc, age desc

        6、查询age>30的name 和age信息,并按照age升序 

        Author.objects.values('age','name').filter(age__gt=30).order_by('age')

        select age,name from Author where age>40 order by age

      6、first()

        返回由查询集匹配的第一个对象,如果没有匹配对象,则返回None。 如果QuerySet没有定义顺序,则查询集自动按主键排序。

        Author.objects.first()

        Author.objects.values().first()

      7、last()

        像first()一样工作,但返回查询集中的最后一个对象。

        

        Author.objects.last()

        Author.objects.values().last()

      8、Max、Min、Avg、Sum、Count

        1、from django.db.models import Max

        Author.objects.all().aggregate(Max('age'))  结果:{'age__max': 70}

        2、from django.db.models import Min

        Author.objects.all().aggregate(Min('age'))  结果:{'age__min': 10}

        3、from django.db.models import Avg

        Author.objects.all().aggregate(Avg('age'))  结果:{'age__avg': 31.384615384615383}

        4、from django.db.models import Sum

        Author.objects.all().aggregate(Sum('age'))  结果:{'age__sum': 408}

        Author.objects.all().aggregate(total_age=Sum('age'))  结果:{'total_age': 408}

        5、from django.db.models import Count

         Author.objects.all().aggregate(Count('age'))  结果:{'age__count': 13}

         #年龄大于30的记录数

          Author.objects.all().filter(age__gt=30).aggregate(Count('age')) 结果:{'age__count': 4}

         

        

        

      

  • 相关阅读:
    vim复制
    嵌入式Linux学习(二)
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1042 乒乓球
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1071 潜伏者
    (Java实现) 洛谷 P1025 数的划分
    (Java实现)洛谷 P1093 奖学金
    (Java实现)洛谷 P1093 奖学金
    Java实现 洛谷 P1064 金明的预算方案
  • 原文地址:https://www.cnblogs.com/shaosks/p/6150067.html
Copyright © 2011-2022 走看看