orm双下滑线

1.比较运算

介绍

  • 大于: __gt

  • 小于: __lt

  • 大于等于: __gte

  • 小于等于: __lte

举例

res = models.User.objects.filter(age__gt=20)
    print(res)   # 年龄大于20
    res1 = models.User.objects.filter(age__lt=30)
    print(res)   # 年龄小于30
    res2 = models.User.objects.filter(age__gte=19)
    print(res2)  # 年龄大于等于19
    res3 = models.User.objects.filter(age__lte=30)

在某一数据集内

介绍

1. in 对应于 MySQL 中的 in 操作,可以接受数组、元组等类型数据作为参数

2. 字符串也可以作为参数,但是转义后的 SQL 的意思不太一样

3. in 操作也可以用于子查询动态的获取列表信息:

4. 没有指定字段,所以是默认搜索 id 的值

举例

# 数组
Blog.objects.filter(id__in=[1,2,3])

# 字符串
Blog.objects.filter(name__in="abc")

# in 操作也可以用于子查询动态的获取列表信息
inner_qs = Blog.objects.filter(name__contains='hunter')
Entry.objects.filter(blog__in=inner_qs)


# 默认是id
Entry.objects.filter(blog__name__in=inner_qs)

在某一范围内

介绍

# 关键字:__range=[]

举例

res = models.User.objects.filter(age__range=[19,40])

模糊查询

介绍

# 关键字:

__contain=''  区分大小写
__icontain=''  不区分大小写

举例


res = models.User.objects.filter(name__contains='k')

res2 = models.User.objects.filter(name__icontains='k')

以什么开头/结尾

介绍

以什么开始:startswith,istartswith,

以什么结尾:endswith, iendswith,

istartswith,iendswith:大小写是不敏感的

举例

    # 查询名字以s开头的数据
    res = models.User.objects.filter(name__startswith='s')
    print(res)
    # 查询名字以k结束的数据
    res = models.User.objects.filter(name__endswith='k')
    print(res)

按照日期查询(data)

介绍

  • __month='1' # 按照月份取

  • __year='2020' # 按照年份

  • __day='29' # 按照天筛选

  • __weekday='' # weekday 对应的是 周几,周日是1,周一是2,到周六是 7

  • week # 一年有 52 个周,如果想获取周数为第几个的话

  • quarter # quarter 是查询季度数据,一年一共四个季度,1月1日到3月31日,4月1日到6月30日,7月1日到9月30日,10月1日到12月31日

  • hour  # hour 是小时

场景:按日期取数据

举例

            
    res = models.User.objects.filter(register_time__month='01')
    print(res)
    res1= models.User.objects.filter(register_time__day='02')
    print(res1)
    res2= models.User.objects.filter(register_time__week_day='02')
    print(res2)
    res3 = models.User.objects.filter(register_time__year='2022')
    print(res3)
    res4 = models.User.objects.filter(register_time__year='2022',register_time__month='02')
    print(res4)
year
Entry.objects.filter(pub_date__year=2005)
Entry.objects.filter(pub_date__year__gte=2005)

month
Entry.objects.filter(pub_date__month=12)
Entry.objects.filter(pub_date__month__gte=6)

day
Entry.objects.filter(pub_date__day=3)
Entry.objects.filter(pub_date__day__gte=3)

week_day
Entry.objects.filter(pub_date__week_day=2)
Entry.objects.filter(pub_date__week_day__gte=2)

hour
Event.objects.filter(timestamp__hour=23)
Event.objects.filter(time__hour=5)
Event.objects.filter(timestamp__hour__gte=12)

minute
Event.objects.filter(timestamp__minute=29)
Event.objects.filter(time__minute=46)
Event.objects.filter(timestamp__minute__gte=29)

second
Event.objects.filter(timestamp__second=31)
Event.objects.filter(time__second=2)
Event.objects.filter(timestamp__second__gte=31)
# 查看所有第二季度的数据
Entry.objects.filter(pub_date__quarter=2)

# 一年有 52 个周,如果想获取周数为第几个的话,可以如此操作:
Entry.objects.filter(pub_date__week=2)

# hour 是小时,与上面的用法同:
TestModel.objects.filter(created_time__hour=9)

 isnull

介绍

判断是否为空

举例 

Entry.objects.filter(pub_date__isnull=True)

limit 、offset

models.Tb1.objects.all()[10:20]

regex正则匹配,iregex 不区分大小写

Entry.objects.get(title__regex=r'^(An?|The) +')
Entry.objects.get(title__iregex=r'^(an?|the) +')

猜你喜欢

转载自blog.csdn.net/qq_52385631/article/details/126950870
Orm