zoukankan      html  css  js  c++  java
  • Django ORM中的模糊查询

    ORM映射
    什么是ORM映射?在笔者认为就是对SQL语句的封装,所写语句与SQL对应语句含义相同,使开发更加简单方便,不过也是存在弊端的,使程序运行效率下降。例如:

    UserInfo.objects.get(id=2)
    等于
    select * from user_userinfo where id=2

    修改管理器(models.py)
    导入新的包:from django.db import models
    进行模糊查询
    开始进行查找前我们先来认识filter()方法。
    这是一个过滤器方法用于过滤掉不符合条件的元素。
    值得一提的是其内自带方法函数的引用方式为‘__方法名称’。
    __exact 精确等于 like ‘aaa’
    __iexact 精确等于 忽略大小写 ilike ‘aaa’
    __contains 包含 like ‘%aaa%’
    __icontains 包含 忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。
    __gt 大于
    __gte 大于等于
    __lt 小于
    __lte 小于等于
    __in 存在于一个list范围内
    __startswith 以…开头
    __istartswith 以…开头 忽略大小写
    __endswith 以…结尾
    __iendswith 以…结尾,忽略大小写
    __range 在…范围内
    __year 日期字段的年份
    __month 日期字段的月份
    __day 日期字段的日
    __isnull=True/False
    举几个例子:

    obj1 = UserInfo.objects.filter(user_name__contains='')#以‘王’开头的user__name
    obj2 = UserInfo.objects.filter(user_name__endswith='')#以‘王’结尾的user__name
    obj3 = UserInfo.objects.filter(id__gte=5)#ID大于等于5的
    obj5 = UserInfo.objects.filter(id__exact=5)#id等于5的
    obj6 = UserInfo.objects.filter(id__in=[1,3,5])#id等于1,3,5,的

    exclude方法,排除选项。

    obj8 = UserInfo.objects.filter(password='123456',id__gt=2).exclude(phone=188)
    #找到符合filter的内容后排除phone等于188的,它的另一种写法为
    from django.db.models import Q
    obj = UserInfo.objects.filter(Q(password='123456') & Q(id__gt=2) & ~Q(phone=188))

    计算和和最大值:

    from django.db.models import Sum,Max,Min
    obj = UserInfo.objects.aggregate(Sum('id'))
    obj = UserInfo.objects.aggregate(Max('id'))
    obj = UserInfo.objects.aggregate(Min('id'))

    统计个数

    print(UserInfo.objects.count())#注:print只可于终端查看

    范围查找

    obj = UserInfo.objects.all()[1:3]#左闭右开,只查找了1和2

    去重复

    obj = person.useraddress_set.all()

    而get方法与filter的最大区别为,get只能返回一个数据,filter可以返回多个,在get查找到两个以上数据时就会报错。

    obj4 = UserInfo.objects.get(id=5)
    city = UserAddress.objects.get(detail='北京望京')

  • 相关阅读:
    【全网最全的博客美化系列教程】文章总目录
    不要再被骗了------QQ盗号原理大揭秘
    努力的孩子运气不会太差,跌宕的人生定当更加精彩
    我的七条人生哲理以及个人学习方法总结
    博客园自定义页面风格设计 后续篇(页面设计模式及代码高亮 鼠标点击效果升级)
    【资料分享】500篇干货解读人工智能新时代
    我的大一生活以及在博客园写博客的这一年
    博客园自定义页面风格设计
    ACM退役记&&回忆录
    留言板
  • 原文地址:https://www.cnblogs.com/RyanJin/p/10187151.html
Copyright © 2011-2022 走看看