查询的切片使用,相当于sql的limit和offset
def get_users(request):
#切片的使用
users=User.objects.all()[1:3]
context={
'users': users
}
return render(request,'get_users.html',context=context)
关于时间的查询,避免django默认时区timezone造成查询结果错误
可以修改settings.py 中的USE_TZ = True,改成false
def get_orders(request):
#orders=Order.objects.filter(o_time__year=2019)
#如果时间查询结果不对,可以在settings里关闭django的默认时区管理,即USE_TZ = True改为false. TZ是timazone
orders=Order.objects.filter(o_time__month=11)
for order in orders:
print(order.o_num,order.o_time)
return HttpResponse("获取订单成功,订单")
外键的设定, 可以通过关联表字段直接查目标表的信息
def get_grades(request):
#通过外键直接查
grades=Grade.objects.filter(student__s_name__contains='mei')
for grade in grades:
print(grade.g_name)
return HttpResponse('获取班级成功')
objects.aggregate的Avg Sum等求平均、求和函数的使用
注意此时的查询结果是一个字典
def get_cost(request):
# customer=Customer.objects.aggregate(Avg('c_cost'))
# customer=Customer.objects.aggregate(Max('c_cost'))
customer=Customer.objects.aggregate(Sum('c_cost'))
#注意此时获取的是一个字典。而不是带字段属性的Queryset
print(customer)
return HttpResponse('获取数据成功')
Django的ORM里F对象及Q对象函数的使用
F对象可以实现同一表内各字段的比较查询 Q对象是封装了条件,实现条件间的逻辑运算
- 与 & 相当于 and
- 或 | 相当于 or
- 非 ~ 相当于not
def get_company(request):
#F对象操作,实现同一表内字段的比较查询
# companys=Company.objects.filter(girl_num__lt=F('boy_num'))
# 还可以实现运算后的比较,女生比男生减10个后还少的公司
# companies=Company.objects.filter(girl_num__lt=F('boy_num')-10)
# Q函数,实现filter的封装,实现条件的逻辑运算(与 &==and 或 |==or 非 ~==not)
companies=Company.objects.filter(Q(girl_num__lt=60) | Q(boy_num__gt=50))
for company in companies:
print(company.c_name)
return HttpResponse('获取数据成功')
|