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}