模型查询()

  • 基础查询)
  • 模糊查询
  • 进阶查询集合函数分组原生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)