5. 查询数据
5.1 基本查询
5.1.1 get()
get()得到一个指定的数据对象。
book = BookInfo.objects.get(id=1
查询不存在的数据会报异常
get()只能用于查询结构为一个的查询
5.1.2 all()
all()得到模型的所有数据对象。返回结果是一个列表。
books = BookInfo.objects.all() • 1
5.1.3 count()
count()返回查询结果的数量。
books_cnt = BookInfo.objects.all().count()
# BookInfo.objects.count()也可以统计所有数据对象的个数 books_cnt = BookInfo.objects.count()
5.2 过滤查询 filter() & get() & exclude()
相当于SQL中的where语句
select * from bookinfo where 条件语句
- filter():筛选过滤符合条件的n个结果(n的取值为0-n)。返回结果为一个列表
- get():筛选符合条件的1个结果(返回结果只能一个,大于等于一个会报错),返回一个单一对象
- exclude():排除掉符合条件剩下的结果,相当于条件语句中not
语法:
以filter()为例
filter(字段名__运算符=值)
字段名和运算符间使用两个下划线进行分割,所以属性名不能包括多个下划线。
5.2.1 运算符
- 相等
- exact:表示判等。
- 模糊查询
- contains:是否包含。
- 说明:如果要包含%无需转义,直接写即可。
- startswith、endswith:以指定值开头或结尾。
- 以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith.
- 空查询
- isnull:是否为null。
- 范围查询
- in:是否包含在范围内。
- 比较查询
- gt大于 (greater then)
- gte大于等于 (greater then equal)
- lt小于 (less then)
- lte小于等于 (less then equal)
- 不等于的运算符,使用exclude()过滤器。
- 日期查询
- year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。
5.2.2 相等
- 相等
- exact:表示判等。
# 查询编号为1的图书 # exact相当于 等于号 book = BookInfo.objects.get(id__exact=1) # 简写形式 book = BookInfo.objects.get(id=1)
# exact相当于 等于号 book = BookInfo.objects.filter(id__exact=1) # 简写形式 book = BookInfo.objects.filter(id=1)
返回结果为一个列表
5.2.3 模糊查询
- 模糊查询
- contains:是否包含。
- 说明:如果要包含%无需转义,直接写即可。
- startswith、endswith:以指定值开头或结尾。
- 以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith.
# 查询书名包含'湖'的图书 # 不知道返回结果有几个,使用filter # 包含 运算符 contains # 如果要包含%无需转义,直接写即可 books = BookInfo.objects.filter(name__contains='湖')
# 查询书名以'部'结尾的图书 # 不知道返回结果有几个,使用filter # startswith、endswith:以指定值开头或结尾。 books = BookInfo.objects.filter(name__endswith='部')
5.2.4 空查询
- 空查询
- isnull:是否为null。
# 查询书名为空的图书 books = BookInfo.objects.filter(name__isnull=True)
5.2.5 范围查询
- 范围查询
- in:是否包含在范围内。
# 查询编号为1或3或5的图书 books = BookInfo.objects.filter(id__in=[1, 3, 5])
5.2.6 比较查询
- 比较查询
- gt大于 (greater then)
- gte大于等于 (greater then equal)
- lt小于 (less then)
- lte小于等于 (less then equal)
- 不等于的运算符,使用exclude()过滤器。
# 查询编号大于3的图书 books = BookInfo.objects.filter(id__gt=3)
# 查询编号不大于3的图书 books = BookInfo.objects.exclude(id__gt=3)