ORM查询

一 only

  only只查询指定字段,查询后的数据类型是 对象。所以是通过 .  调用字段。返回的结果仍然可以调用,没有指定的字段。这种情况下,查询的效率较低。

  PS values('xx')

    查询后的数据类型是字典,所有是通过 obj [' xx '] ,以这种方式取值。  字段如果不在values中,查询结果会报错。

  示例:

def test(request):
    obj_list1 = models.Teacher.objects.all().only('name')
    for item in obj_list1:
        print(item.title,type(item))

    obj_list2 = models.Teacher.objects.all().values('name')
    for item in obj_list2:
        print(item['name'],type(item))

    return HttpResponse('ok')

  输出:

讲师 <class 'app01.models.Teacher'>
[13/Mar/2018 20:10:33] "GET /test/ HTTP/1.1" 200 2
讲师 <class 'app01.models.Teacher'>
alex <class 'dict'>
egon <class 'dict'>

二 defer,与only正好相反。不取某些字段值。

三 F查询

  http://www.bubuko.com/infodetail-2416159.html

  

  需求:书的价格全部加20

def test(request):
    models.Book.objects.update(price=F('price')+20)
    return HttpResponse('ok')

  显示:

  

四 Q查询

  http://www.cnblogs.com/linjiqin/p/3817814.html

def test(request):
    lists = models.Teacher.objects.filter(Q(name__startswith='a'))
    print(lists)
    return HttpResponse('ok')

  显示:

<QuerySet [<Teacher: alex>]>
原文地址:https://www.cnblogs.com/654321cc/p/8561501.html