- all返回的是QuerySet对象,程序并没有真的在数据库中执行SQL语句查询数据,但支持迭代,使用for循环可以获取数据。
- get返回的是Model对象,类型为列表,说明使用get方法会直接执行sql语句获取数据
- filter和get类似,但支持更强大的查询功能补充:条件选取querySet的时候,filter表示=,exclude表示!=。
以上三点都是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()之间的区别的理解,如有不对还请帮忙指正,谢谢!



