- 今天学习的是有关于在model中进行数据查询的相关知识。
- 在views.py中进行查询的操作:
- 对单个对象进行获取:
- 查询条件没有匹配的对象,会抛出异常,DoesNotExist
- 查询出多个匹配的对象,也会抛出异常,MultipleObjectsReturned
- first和last的函数使用。直接在objects之后选择这类的函数,可以从整个返回的数据集中挑选出第一个和最后一个。
- 切片。和python中的切片不太一样
- 主要通过objects.all()[a:b]实现。获取的是第a条到b-1条的数据。属于左闭右开。
def query_persons(request): persons = Person.objects.all()[1:3] context = { "persons": persons } return render(request, 'db_list.html', context=context)
- 对单个对象进行获取:
- 然后是学习对日期的条件过滤。
def date(request):
orders=Order.objects.filter(o_time__month=09)
- 在django中,查询条件有时区问题。可以通过以下的方式解决:
- 关闭django中自定义的时区
- 在数据库中创建对应的时区表
- 使用aggregate()函数返回聚合函数的值
- Avg:平均值
- Count:数量
- Max:最大
- Min:最小
- Sum:求和
- 使用形式示例:XXX.objects().aggregate(Max(‘age’))
- F对象:
- 可以获取不同的属性值并且进行比较。
- 可以支持算术运算
- 使用函数示例:user=user.objects.filter(num__gte=F(‘other_num’))
- Q对象:
- 可以对条件进行封装
- 封装之后,可以支持逻辑运算
- 与 & and
- 或 | or
- 非 - not
- 使用函数示例:companies=company.object.filter(Q(num__gt=5)|Q(num__gt=10))