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

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

copyIn [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语句获取数据

copyIn [6]: v = Vocation.objects.get(id=2)

In [7]: v
Out[7]: <Vocation: 2>

In [8]: v.job
Out[8]: '文员'

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

copyIn [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

posted @   索匣  阅读(710)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· 开发者新选择:用DeepSeek实现Cursor级智能编程的免费方案
· 【译】.NET 升级助手现在支持升级到集中式包管理
· 独立开发经验谈:如何通过 Docker 让潜在客户快速体验你的系统
· Tinyfox 发生重大改版
点击右上角即可分享
微信分享提示