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]: , , , , , , ]>
In [4]: for i i v:
...: print(i.job)
File "", 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]:
In [8]: v.job
Out[8]: '文员'
filter和get类似,但支持更强大的查询功能,同时返回的也是个查询集,查询集不能直接使用属性。
In [9]: v = Vocation.objects.filter(id=2)
In [10]: v
Out[10]: ]>
In [13]: v.job
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
in
----> 1 v.job
AttributeError: 'QuerySet' object has no attribute 'job'
In [14]: v[0].id
Out[14]: 2
使用get方法查询返回的是单个字段,查询字段必须是主键或者唯一约束的字段,并且查询的数据必须存在,若重复或不存在则报错
使用filter方式查询,返回的是个列表
相关链接: