当我们需要从数据库中获取特定数据时,我们可以使用 Django ORM 的 filter()
函数来筛选满足需求的数据,其作用相当于 SQL 中 WHERE
子句。
filter()
函数的使用方法filter()
函数的一般形式是:Model.objects.filter(过滤条件)
。
过滤条件可以是以下内容:
field=value
field__gt=value
、field__gte=value
、field__lt=value
、field__lte=value
field__in=[value1, value2, ...]
、field__range=[value1, value2]
field__contains=value
、field__startswith=value
、field__endswith=value
其中,field
是模型类中的字段名,value
是你需要查询的值。除特殊说明外,查询符号(=
、>
等)必须紧贴字段名,并用两个下划线隔开。
我们还可以通过 and
、or
、not
等逻辑操作符来组合条件。
实例一:
我们有以下模型:
class Member(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField()
gender = models.CharField(max_length=1)
现在需要查询所有性别为男性且年龄在 18 岁到 30 岁之间的成员,可以这样实现:
men = Member.objects.filter(gender='M', age__range=[18, 30])
实例二:
现在有以下模型:
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
publisher = models.CharField(max_length=50)
price = models.DecimalField(max_digits=6, decimal_places=2)
pub_date = models.DateField()
现在需要查询所有价格大于等于 100 元且出版日期在 2020 年 1 月 1 日之后的图书,实现方式如下:
books = Book.objects.filter(price__gte=100, pub_date__gte='2020-01-01')
注意:日期格式应该符合 YYYY-MM-DD
的规范,否则会出现查询错误。
filter()
函数的返回值filter()
函数的返回值是一个 QuerySet 对象,它实质上是一个查询结果集的惰性对象,也就是说并不会立即查询数据库,而是在调用它的方法时才会去执行 SQL 查询。
如果需要立即查看查询结果,则需要使用方法 list()
或者 for
循环遍历这个 QuerySet 对象,例如:
men_age_list = [men.age for men in men]
上述代码中,我们使用列表推导式对查询结果进行了处理,将查询结果中的每一条数据的年龄提取出来,存入了列表 men_age_list
中。
filter()
函数用来从数据库中筛选查询符合一定条件的数据。list()
方法或者循环遍历才能立即查看查询结果。本文链接:http://task.lmcjl.com/news/16259.html