模型_数据的其它查询
原创...大约 2 分钟
文档:https://docs.djangoproject.com/zh-hans/4.1/ref/models/querysets/#count
排序
Queryset.order_by(*fields)
默认情况下,QuerySet
返回的结果是按照模型 Meta
中的 ordering
选项给出的排序元组排序的
class Meta:
ordering = ['name']
也可以通过使用 order_by
方法在每个 QuerySet
的基础上覆盖这一点,举例:
Waiter.objects.filter(induction__year=2030).order_by('-induction','id')
上述结果将按 induction
降序排列,然后按 id
升序排列。"-induction"
前面的负号表示 降序。升序是隐含的
其它查询
- reverse() 反向返回查询集元素的顺序
- count() 返回一个整数,表示数据库中与
QuerySet
匹配的对象数量 - first() 返回的是查询集中的第一个对象
- last() 返回的是查询集中的最后一个对象
- values()
- 返回一个
QuerySet
,当用作可迭代对象时,返回字典,而不是模型实例, 其中每一个字典都代表一个对象,键与模型对象的属性名相对应 values()
方法接受可选的位置参数*fields
,它指定了SELECT
应该被限制的字段名
- 返回一个
from food_app.models import Waiter
# 获取所有数据
Waiter.objects.all()
# 获取所有数据,按id排序,升序
Waiter.objects.all().order_by('id')
# 获取所有数据,按id排序,降序
Waiter.objects.all().order_by('-id')
# 获取所有数据,按id排序,升序,反序
Waiter.objects.all().order_by('id').reverse()
# 获取所有数据,按induction排序,升序
Waiter.objects.all().order_by('induction')
# 获取2030-6-7之前入职的数据,按induction排序升序,若值相同按id排序降序
Waiter.objects.filter(induction__lt='2030-6-7').order_by('induction','-id') # 获取2030-6-7之前入职的数据,统计数量
Waiter.objects.filter(induction__lt='2030-6-7').count()
# 获取2030-6-7之前入职的数据,获取第1条
Waiter.objects.filter(induction__lt='2030-6-7').first()
# 获取2030-6-7之前入职的数据,获取最后1条
Waiter.objects.filter(induction__lt='2030-6-7').last()
# 获取2030-6-7之前入职的数据,将数据转成dict放在QuerySet中
Waiter.objects.filter(induction__lt='2030-6-7').values()
# 获取2030-6-7之前入职的数据,将数据转成dict,只要id与name字段,放在QuerySet中
Waiter.objects.filter(induction__lt='2030-6-7').values('id','name')
提示
大部分检索是懒惰执行的,只在真实获取值的时候,才会去连接数据库获取数据
# 还没获取数据
w1 = Waiter.objects.filter(induction__lt='2030-6-7').values('id','name')
# 获取数据
print(w1)
# 获取数据,因为要做数据切片
w1 = Waiter.objects.filter(induction__lt='2030-6-7').values('id','name')[:2]
Powered by Waline v2.15.7