Django objects.all() ,objects.get() ,objects.filter()之间的区别
1、ret=UserInfo.objects.all()
- all返回的是
QuerySet
对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。
2、ret=UserInfo.objects.get(id=‘1’)
- get返回的是
Model
对象,类型为列表,说明使用get方法会直接执行sql语句获取数据
3、ret=UserInfo.objects.filter()
- filter和get类似,但支持更强大的查询功能补充:条件选取querySet的时候,filter表示=,exclude表示!=。
4、我的总结
以上三点都是copy网上某一个博主的,但是到底谁是作者已经不得而知了,大家都是copy,看的我真的人麻了…
一搜五六七个点进去一看一毛一样的!而且他的说法有一点问题,大家也照搬。
对于前两条是没有疑问的,主要就是最后这个objects.filter()
,是有着本质不同的:
以下是我打印的实例:
代码
:
user = Userinfo.objects.all()
print(user)
print(type(user))
user_1 = Userinfo.objects.get(Open_Id=openid)
print(user_1)
print(type(user_1))
user_2 = Userinfo.objects.filter(Open_Id=openid)
print(user_2)
print(type(user_2))
运行结果
:
很明显objects.all()
、objects.filter()
都是QuerySet
对象,而objects.get()
是Model
对象,不能说filter和get类似,很多新手就会误会,两个当同样的效果用。只是说他俩都是条件查询罢了,这点比较类似还行。
而具体QuerySet
对象和Model
对象的不同我目前就知道:
Model
对象是你运行到就立马执行SQL查询,而QuerySet
对象是你真正调用到他的时候才会去执行SQL查询Model
对象可以这样用而QuerySet
对象不行:
user = Userinfo.objects.get(Open_Id=openid)
user.open_id = openid # 对数据库的数据直接进行覆盖
user.username = username
user.save()
以上就是我对Django objects.all() ,objects.get() ,objects.filter()之间的区别的理解,如有不对还请帮忙指正,谢谢!