模型查询()-其他
模型查询()
- 基础查询)
- 模糊查询
- 进阶查询集合函数分组原生sql
- 集合函数
- 分组
- 原生sql
基础查询)
-
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对象的内置方法,返回一个int
stu = 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 是查询是否为null
stu = 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 Set stu = Student.objects.raw(“select * from db_student”) # 返回query set对象里面嵌套模型类
print(stu)
for x in stu:
print(x)
————————
- 基础查询)
- 模糊查询
- 进阶查询集合函数分组原生sql
- 集合函数
- 分组
- 原生sql
基础查询)
-
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对象的内置方法,返回一个int
stu = 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 是查询是否为null
stu = 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 Set stu = Student.objects.raw(“select * from db_student”) # 返回query set对象里面嵌套模型类
print(stu)
for x in stu:
print(x)