美文网首页
day43-Django模型操作

day43-Django模型操作

作者: xdxh | 来源:发表于2018-11-28 17:22 被阅读0次

一、模型查询

1.filter(条件):查询满足条件的信息

def sel_stu(request):
    # 查询年龄等于18的学生
    stus = Student.objects.filter(age=18)

    # 获取学生的姓名
    stus_name = [stu.name for stu in stus]

    return HttpResponse(stus_name)

2.all():查询所有

def sel_stu(request):
    # 查询所有学生
    stus = Student.objects.all()

    # 获取学生的姓名
    stus_name = [stu.name for stu in stus]

    return HttpResponse(stus_name)

3.get(条件): 获取唯一的满足条件的对象,且查询的条件必须存在
first(): 获取结果中的第一个对象
last(): 获取结果中的最后一个对象
如果查询条件不存在,则报错。如果查询有多个结果,也会报错。

def sel_stu(request):
    stu = Student.objects.get(name='小明')

    # 获取学生的姓名
    stu_name = stu.name

    return HttpResponse(stu_name)

4.exclude(条件):过滤掉满足条件的信息

def sel_stu(request):
    stus = Student.objects.exclude(name='小明')

    # 获取学生的姓名
    stus_name = [stu.name for stu in stus]

    return HttpResponse(stu_name)

5.filter(条件1,条件2):多条件查询

def sel_stu(request):
    # 方法一:
    stus = Student.objects.filter(age=18).filter(gender=0)
    # 方法二:
    stus = Student.objects.filter(age=18, gender=0)

    # 获取学生的姓名
    stus_name = [stu.name for stu in stus]

    return HttpResponse(stu_name)

6.order_by():排序

def sel_stu(request):
    # 升序
    # stus = Student.objects.all().order_by('id')
    # 降序
    stus = Student.objects.all().order_by('-id')

    # 获取学生的姓名
    stus_name = [stu.name for stu in stus]
    return HttpResponse(stu_name)

7.values():以键值对的形式获取对象信息

def sel_stu(request):
    # stus_value = Student.objects.filter(name='小明').values('name')
    # stus_value = Student.objects.filter(name='小明').values()
    stus_value = Student.objects.all().values()

    return HttpResponse(stus_value)

8.exists(): 是否存在,存在返回True,不存在返回False

def sel_stu(request):
    stu = Student.objects.filter(name='妲己').exists()

    return HttpResponse(stu)

二、比较运算符

1.模糊查询
contains:是否包含,大小写敏感
startswith,endswith:以values开头或者结尾,大小写敏感
以上的运算符前加上i(ignore)就不区分大小写了
contains:大小写敏感 icontains:大小写不敏感

def sel_stu(request):
    # 姓名中包含大的学生信息
    stus = Student.objects.filter(name__contains='大')
    # 姓王的学生信息
    stus = Student.objects.filter(name__startswith='王')
    # 姓名最后一个字是克的学生信息
    stus = Student.objects.filter(name__endswith='克')

    # 获取学生的姓名
    stus_name = [stu.name for stu in stus]

    return HttpResponse(stus_name)

2.in
__in:是否包含在范围内
pk:主键

def sel_stu(request):
    stus = Student.objects.filter(id__in=[1, 2, 3])

    stus = Student.objects.filter(pk__in=[1, 2, 3])

    return HttpResponse(stus)

3.gt,gte,lt,lte
小于:__gt
大于等于:__gte
小于:__lt
小于等于:__gte

def sel_stu(request):
    # 年龄小于19的学生
    stus = Student.objects.filter(age__lt=19)

    # 年龄大于等于19的学生
    stus = Student.objects.filter(age__lte=19)

    # 年龄大于19的学生
    stus = Student.objects.filter(age__gt=19)

    # 年龄大于等于19的学生
    stus = Student.objects.filter(age__gte=19)

    return HttpResponse(stus)

三、聚合函数

aggregate()函数返回聚合函数的值
1.Avg():求平均值

def sel_stu(request):
    # 查询平均年龄
    avg_age = Student.objects.all().aggregate(Avg('age'))

    return HttpResponse(avg_age)

2.Count():求总数

def sel_stu(request):
    # 查询学生个数
    count_num = Student.objects.all().aggregate(Count('id'))

    return HttpResponse(count_num)

3.Max():求最大值

def sel_stu(request):
    # 查询最大年龄
    max_age = Student.objects.all().aggregate(Max('age'))

    return HttpResponse(max_age)

4.Min():求最小值

def sel_stu(request):
    # 查询最小年龄
    min_age = Student.objects.all().aggregate(Min('age'))

    return HttpResponse(min_age)

5.Sum():求和

def sel_stu(request):
    # 查询年龄总和
    sum_age = Student.objects.all().aggregate(Sum('age'))


    return HttpResponse(min_age)

四、Q对象和F对象

1.Q对象:将过滤条件组合起来

def sel_stu(request):
    # 查询age=18或者gender=1的学生信息
    stus = Student.objects.filter(Q(age=18) | Q(gender=1))

    # 查询age=18并且gender=1的学生信息
    stus = Student.objects.filter(Q(age=18) & Q(gender=1))
    stus = Student.objects.filter(Q(age=18), Q(gender=1))

    # 查询age!=18或者gender=1的学生信息
    stus = Student.objects.filter(~Q(age=18) | Q(gender=1))

    return HttpResponse(stus)

2.F对象:可以使用模型的A属性与B属性进行比较

def sel_stu(request):
    # 查询语文成绩比数学成绩高的学生信息
    stus = Student.objects.filter(chinese__gt=F('math'))

    # 查询语文成绩比数学成绩高10分的学生信息
    stus = Student.objects.filter(chinese__gt=F('math')+10)

    return HttpResponse(stus)

相关文章

网友评论

      本文标题:day43-Django模型操作

      本文链接:https://www.haomeiwen.com/subject/uysaqqtx.html