Django objects.all() ,objects.get() ,objects.filter()之间的区别

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()之间的区别的理解,如有不对还请帮忙指正,谢谢!

你可能感兴趣的:(django,mysql,数据库,django,python,后端)