django模型2

 模型查询
            概述
                查询集表示从数据库获取的对象的集合
                查询集可以有多个过滤器
                过滤器就是一个函数,基于所给的参数限制查询集结果
                从SQL角度来说,查询集和select语句等价,过滤器就像where条件
            查询集
                在管理器上调用过滤器方法返回查询集
                查询集经过过滤器筛选后返回新的查询集,所以可以写成链式调用
                惰性执行
                    创建查询集不会带来任何数据库的访问,直到调用数据库时,才会访问数据
                直接访问数据的情况:
                    迭代
                    序列化
                    与if合用
                返回查询集的方法称为过滤器
                    all():返回查询集中的所有数据
                    filter():保留符合条件的数据
                        filter(键=值)
                        filter(键=值,键=值)  且的关系
                        filter(键=值).filter(键=值)   且的关系
                    exclude():过滤掉符合条件的
                    order_by():排序
                    values():一条数据就是一个对象(字典),返回一个字典列表,每条数据转换为一个字典,内容为{'id':12,'name':xxx},将所有数据返回
                 返回单个数据
         get()
                        返回一个满足条件的对象
                        注意:
                            如果没有找到符合条件的对象,会引发模型类.DoesNotExist异常
                            如果找到多个对象,会引发模型类MultipleObjectsReturned异常
                    count():返回查询集中对象的个数
                    first():返回查询集中第一个对象
                    last():返回查询集中最后一个对象
                    exists():判断查询集中是否有数据,如果有数据返回 True,否则返回 False.
                限制查询集
                    查询集返回列表,可以使用下标的方法进行限制,等同于sql中的limit语句
                    注意:下标不能是负数
                    示例:studentsList = Students.stuObj2.all()[0:5]
                查询集的缓存
                    概述:
                        每个查询集都包含一个缓存,来最小化对数据库的访问
                        在新建的查询集中,缓存首次为空,第一次对查询集求值,会发生数据缓存,Django会将查询出来的数据做一个缓存,并返回查询结果。
                        以后的查询直接使用查询集的缓存
                字段查询
                    概述
                        实现了sql中的where语句,作为方法filter(),exclude(),get()的参数
                        语法:属性名称__比较运算符=值
                        外键:属性名称_id
                        转义:类似sql中的like语句
                             like语句使用%是为了匹配点位,匹配数据中的%使用(where like "\%")
                             filter(sname__contains="%") 不需要转义字符了
                    比较运算符
                        exact:判断,大小写敏感
                            filter(isDelete=False)
                        contains:是否包含,大小写敏感
                            studentsList = Students.stuObj2.filter(sname__contains="孙")
                        startswith,endswith:以value开头或结尾,大小写敏感
                        以上四个在前面加上i,就表示不区分大小写iexact,icontains,istartswith,iendswith
                        isnull,isnotnull    是否为空    
                            filter(sname__isnull=False)
                        in:是否包含在范围内    sname__in=[1,2,3]
                        gt大于,gte大于等于,lt小于,lte小于等于    sage__gt=30
                        year,month,day,week_day,hour,minute,second
                            studentsList = Students.stuObj2.filter(lastTime__year=2017)
                    跨关联查询
                            处理join查询
                                语法:
                                    模型类名__属性名__比较运算符
                                    # 描述中带有‘薛延美’这三个字的数据是属于哪个班级的
                                    grade = Grades.objects.filter(students__scontend__contains='薛延美')
                                    print(grade)
                            查询快捷pk代表的主键
                        聚合函数
                from django.db.models import Max,Min,Avg....
                            使用aggregate函数返回聚合函数的值
                            Avg
                            Count
                            Max
                                maxAge = Student.stuObj2.aggregate(Max('sage'))
                                maxAge为最大的sage。
                            Min
                            Sum
                        F对象
                            可以使用模型的A属性与B属性进行比较
                            from django.db.models import F,Q
                            def grades1(request):
                                g = Grades.objects.filter(ggirlnum__gt=F('gboynum'))
                                print(g)
                                # [<Grades: python02>,<Grades: python03>]
                                return HttpResponse("OOOOOOOo")
                            支持F对象的算术运算
                                g = Grades.objects.filter(ggirlnum__gt=F('gboynum')+20)
                        Q对象
                            概述:过滤器的方法的关键字参数,条件为And模式
                            需求:进行or查询
                            解决:使用Q对象
                                def students4(request):
                                    studentsList = Students.stuObj2.filter(Q(pk__lte=3) | Q(sage__gt=50))
                                    return render(request, 'myApp/students.html', {"students": studentsList})
                                只有一个Q对象的时候,就是用于正常匹配条件
                                studentsList = Students.stuObj2.filter(~Q(pk__lte=3))
                                ~Q是取反

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值