Django ORM中get和filter的区别

Django ORM中get和filter的区别

在Django ORM中,查询数据时可以使用get或者filter方法,但是这两者之间存在差别,并且不同的情形下,应该选择不同的方法,这篇博客介绍两种方法之间的区别。

准备工作 

首先创建数据表Test_user,用于之后的示例演示。

from django.db import models

class Test_user(models.Model):
    name = models.CharField(max_length=20)
    age = models.SmallIntegerField(default=0)
    sex = models.CharField(max_length=5, default='未知')

 在数据库中进行查看:

然后我们插入几条数据:

在数据库中进行查看:

get和filter的区别

1. 返回值

  • get的返回值是一个定义的model类的实例,即对象
  • filter的返回值是一个QuerySet的集合对象,可使用迭代或者遍历,切片等,但是不等于list类型(使用一定要注意)

示例如下:

2. 抛出异常

  • get:只有一条记录返回的时候才正常。所以get多用于查询主键字段或者具有唯一性约束的字段,当有多条记录或者没有记录返回时,使用get均会抛出异常。
  • filter:没有记录、有一条或者多条记录返回均不会抛出异常。(没有记录的时候,返回值是一个空集合)

示例如下:

使用get进行查询:

(1)当返回多条记录时:

(2)当没有记录返回时:

使用filter进行查询:

(1)当返回多条记录时:

(2)当没有记录返回时:

3. 对数据表进行修改

前面的博客Django学习Day10——模型的使用(二)中介绍了对数据表中的数据进行修改的两种方式:

(1)user.update()方法

这种方法只能配合filter方法进行使用:

使用get方法会报错:

(2)user.xx = xx, user.save()

这种更新数据的方式可以和get或者filter方法进行配合使用:

示例如下:

在数据库中进行查看:

然后我们使用filter的方法,再将小明的年龄修改回去:

在数据库中进行查看:

参考资料

1、https://docs.djangoproject.com/zh-hans/3.1/topics/db/queries/#retrieving-a-single-object-with-get

2、https://blog.csdn.net/orangleliu/article/details/38597593

猜你喜欢

转载自blog.csdn.net/ProQianXiao/article/details/113815087
今日推荐