目录
基础查询)
-
all
查询所有对象(表里的每一条记录就是一个模型类对象),返回queryset对象(query set是一个集合 他是一个数据类型对象)stu = Student.objects.all() print(stu[0].name) # 获取到query set这个集合后 可以获取里面模型对象的值
-
first
查询第表中的第一条数据,返回一个模型类对象stu = Student.objects.first() # 返回一个模型类对象 print(stu.name) print(stu.age)
-
last
查询表中的最后一条数据,返回模型类对象stu = Student.objects.last() # 返回一个模型类对象 print(stu.name) print(stu.age)
-
filter
条件查询,相等于sql里面的where,返回一个集合query set对象stu = Student.objects.filter(sex="1") # 返回符合条件的query set集合对象,和sql里面的where set="1" stu = Student.objects.filter(sex="1",age="34") # 返回符合条件的query set集合对象,逻辑并且(and),相等于where set="1" and age="34" print(stu)
-
exclude
查询符合条件以外的数据,返回一个query set集合对象stu = Student.objects.exclude(name="张三") # 相等于 WHERE NOT (`db_student`.`name` = '张三') stu = Student.objects.exclude(sex="0",age=19) # 逻辑并且, 就是排除sex="0" and age=19的记录 将其他数据全部查出来 print(stu)
-
get
查找符合条件的,查询结果必须只有一条符合条件的,查出多个或者0个都会报错,返回一个模型类对象stu = Student.objects.get(sex="0",age=19) # 逻辑并且 print(stu)
-
get
查找符合条件的,查询结果必须只有一条符合条件的,查出多个或者0个都会报错,返回一个模型类对象stu = Student.objects.get(sex="0",age=19) # 逻辑并且 print(stu)
-
order_by
是query set类型的一个内置方法,只要是一个queryset对象都可以调用,同样返回一个queryset默认升序 排序字段名称前面加上- 意思就是降序,返回还是一个query set,可以使用多个字段进行排序 优先使用第一个字短排序 如果第一个字段排序有相同的就会按照第二个给定的字段
stu = Student.objects.all() print(stu.order_by("-age","-id"))
-
count
做计数用,count是queryset对象的内置方法,返回一个intstu = Student.objects.all() print(stu.count()) stu = Student.objects.filter(sex="1") # 只要是一个query set对象都可以使用 print(stu.count())
-
exists
判断表中是否有记录stu = Student.objects.exists() # 返回一个布尔值 True/False print(stu)
-
value
翻译成sql是select 默认查出所有字段加上values查出指定字段数据,返回以一个query set对象 集合里面放的是字典stu = Student.objects.all().values("name","age") print(stu) stu = Student.objects.filter(name="zhq").values("name", "age") print(stu)
-
value_list
翻译成sql是select 默认查出所有字段加上values查出指定字段数据,返回以一个query set对象 集合里面放的是元组stu = Student.objects.all().values_list("name","age") print(stu) stu = Student.objects.filter(name="张洪强").values_list("name", "age") print(stu)
-
distinct
是queryset的一个内置方法,去重stu = Student.objects.all().values("age").distinct() # 去重 print(stu) print(stu)
模糊查询
-
__contains
是查询包含的stu = Student.objects.filter(name__contains="王") # name包含王的全部查出来 print(stu)
-
__startswith
是查询什么开头的数据stu = Student.objects.filter(name__startswith="张") # 将name是张开头的全部查出来 print(stu) stu = Student.objects.filter(name__endswith="四") print(stu)
-
__endswith
是查询什么结尾的数据stu = Student.objects.filter(name__endswith="四") # 将name是四结尾的全部查出来 print(stu)
-
__isnull
是查询是否为nullstu = Student.objects.filter(description__isnull=False) # True代表为空/False代表不为空 print(stu)
-
__gt
是查询大于的stu = Student.objects.filter(age__gt=30) # 将age大于30的全部查出来 print(stu)
-
__gte
是查询大于等于的stu = Student.objects.filter(age__gte=23) # 将age大于等于23的全部查出来 print(stu)
-
__lt
是查询小于的stu = Student.objects.filter(age__lt=23) # 将age小于23的全部查出来 print(stu)
-
__lte
是查询小于等于的stu = Student.objects.filter(age__lte=23) # 将age小于等于23的全部查出来 print(stu)
-
__range
是查询区间的stu = Student.objects.filter(age__range=(20,50)) # 将age20到50之前的数据全部查出来 print(stu)
-
__in
是查询给定的多个值stu = Student.objects.filter(age__in=(22,34)) # age = 22 或者等于34 print(stu)
-
__year
是查询查日期某一年的数据stu = Student.objects.filter(birthday__year="2000") # 查询birthday是2000年的所有数据 print(stu)
-
__month
是查询查日期某一月的数据stu = Student.objects.filter(birthday__year="2000",birthday__month="10") # # 查询birthday是2000年10月的所有数据 print(stu)
进阶查询
-
F()
查属性和属性对比from django.db.models import F stu = Student.objects.filter(gongji__gt=F("fangyu")) # 查询gongji 大于 防御的所有值 print(stu)
-
Q()
做逻辑判断或
者from django.db.models import Q stu = Student.objects.filter(Q(age__gt=23) | Q(sex=0)) # 查询age 大于23 或者 sex=0的数据,Q使用方法Q() | Q() print(stu)
-
Q()
做逻辑判断非
from django.db.models import Q stu = Student.objects.filter(~Q(age__gt=23)) # 查询age 不大于23 ,Q使用方法Q() print(stu)
-
Q()
做逻辑判断与
from django.db.models import Q stu = Student.objects.filter(Q(age__gt=23) & Q(sex=0)) # 查询age 大于23 并且 sex=0的数据 print(stu)
集合函数
-
Avg
求平均值,返回一个字典from django.db.models import Avg stu = Student.objects.aggregate(age_avg=Avg("age")) # 不给age_avg变量名 返回的字典的键是默认的 给定就用给定的age_avg print(stu)
-
Sum
求和,返回一个字典from django.db.models import Avg,Sum,Max,Min,Count stu = Student.objects.aggregate(age_sum=Avg("age")) # 不给age_sum变量名 返回的字典的键是默认的 给定就用给定的age_sum print(stu)
-
Max
求最大值,返回一个字典from django.db.models import Max stu = Student.objects.aggregate(age_max=Max("age"))# 不给age_max变量名 返回的字典的键是默认的 给定就用给定的age_max print(stu)
-
Min
求最大值,返回一个字典from django.db.models import Min stu = Student.objects.aggregate(age_min=Min("age"))# 不给age_min变量名 返回的字典的键是默认的 给定就用给定的age_min print(stu)
-
Count
求最大值,返回一个字典from django.db.models import Count stu = Student.objects.aggregate(age_count=Avg("age"))# 不给age_count变量名 返回的字典的键是默认的 给定就用给定的age_count print(stu)
分组
annotate
分组,返回一个query set对象集合stu = Student.objects.values("sex").annotate(gongji=Avg("gongji")) # annotate 前面加上values是分组的作用 就是根据哪个字短分组 annotate进行在过滤 求平均值 print(stu)
原生sql
raw
可以直接写sql,返回一个quest set子类Raw Query Setstu = Student.objects.raw("select * from db_student") # 返回query set对象里面嵌套模型类 print(stu) for x in stu: print(x)