• Django objects.all()、objects.get()与objects.filter()之间的区别介绍


    objects.all()返回的是个QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。

    In [1]: from index.models import *
    
    In [2]: v = Vocation.objects.all()
    
    In [3]: v
    Out[3]: <QuerySet [<Vocation: 2>, <Vocation: 3>, <Vocation: 5>, <Vocation: 7>, <Vocation: 8>, <Vocation: 11>, <Vocation: 12>]>
    
    In [4]: for i i v:
       ...:     print(i.job)
      File "<ipython-input-4-5b967446af21>", line 1
        for i i v:
              ^
    SyntaxError: invalid syntax
    
    
    In [5]: for i in v:
       ...:     print(i.job)
       ...: 
    文员
    网站设计
    项目经理
    jj
    zz
    aa1
    aa2
    

    get返回的是Model对象,类型为列表,说明使用get方法会直接执行sql语句获取数据

    In [6]: v = Vocation.objects.get(id=2)
    
    In [7]: v
    Out[7]: <Vocation: 2>
    
    In [8]: v.job
    Out[8]: '文员'
    

    filter和get类似,但支持更强大的查询功能,同时返回的也是个查询集,查询集不能直接使用属性。

    In [9]: v = Vocation.objects.filter(id=2)
    
    In [10]: v
    Out[10]: <QuerySet [<Vocation: 2>]>
    In [13]: v.job
    ---------------------------------------------------------------------------
    AttributeError                            Traceback (most recent call last)
    <ipython-input-13-b87bc0c3b499> in <module>
    ----> 1 v.job
    
    AttributeError: 'QuerySet' object has no attribute 'job'
    
    In [14]: v[0].id
    Out[14]: 2
    

    使用get方法查询返回的是单个字段<Vocation: 2>,查询字段必须是主键或者唯一约束的字段,并且查询的数据必须存在,若重复或不存在则报错
    使用filter方式查询,返回的是个列表<QuerySet [<Vocation: 2>]>
    相关链接:
    https://www.cnblogs.com/wkhzwmr/p/15589934.html

    努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
  • 相关阅读:
    iOS drewRect方法
    iOS中的单例
    iOS中类别的使用
    iOS存储的三种方式
    安卓上微信闪退的一种解决方法
    [Z] 通天塔导游:各种编程语言的优缺点
    怎样面对痛苦?
    [Z] 10 种必知必会的软件开发工具
    [Z] Linux 内核同步机制
    [Z] 囚禁你的精灵(daemon)进程
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15616334.html
Copyright © 2020-2023  润新知