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) +')