Django框架(二)---数据库操作

基本查询

get查询

get查询的是单一结果,如果不存在会抛出模型类名.Does.Not.Exist异常。

BookInfo.objects.get(id=1)

all查询

all查询的是多个结果。返回类型是一个查询集,可迭代。

BookInfo.objects.all()

count查询

count查询的是结果的数量

BookInfo.objects.count()

过滤查询

filter查询

filter过滤出多个结果。过滤条件的表达式:属性名称__比较运算符=值

  • exact:相等
BookInfo.objects.filter(id__exact=1)
  • contains:模糊查询,是否包含。
BookInfo.objects.filter(name__contains='传')
  • startwith:以指定值开头
BookInfo.objects.filter(name__startswith='部')
  • endwith:以指定值结尾
BookInfo.objects.filter(name__endswith='部')

:以上运算符严格区分大小写,在运算符钱加上i不区分大小写,比如iexact。

  • isnull:空查询,是否为null。
BookInfo.objects.filter(name__isnull=True)
  • in:范围查询,是否包含在范围内。
#查询id是否包含在1 3 5内的对象
BookInfo.objects.filter(id__in=[1,35])
  • gt:比较查询,大于。
BookInfo.objects.filter(id__gt=3)
  • gte:比较查询,大于等于。
BookInfo.objects.filter(id__gte=3)
  • lt:比较查询,小于。
BookInfo.objects.filter(id__lt=3)
  • lte:比较查询,小于等于。
BookInfo.objects.filter(id__lte=3)
  • exclude:比较查询,排除。
BookInfo.objects.exclude(id=3)
  • 日期查询:
    year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。
BookInfo.objects.filter(pub_date__year=1980)

F和Q对象

  • F对象
    F对象主要用于两个字段的比较;基本语法:A模型字段__运算符=F(B模型字段)
BookInfo.objects.filter(bread__lte=F('bcommet'))

django还支持对F()对象使用算数运算

BookInfo.objects.filter(bread__lte=F('bcommet')*2)
BookInfo.objects.filter(bpub_date__lt=F('bpub_date') + timedelta(days=1))
  • Q对象

在查询中需要进行or(或)查询,使用Q对象;基本语法:

或:Q(字段__运算符=)|Q(字段__运算符=)
与:Q(字段__运算符=)&Q(字段__运算符=)
非:~Q(字段__运算符=)

BookInfo.objects.filter(Q(pk__lt=6) | Q(bcommet__gt=10))

聚合函数和关联查询

  • 聚合函数
    使用aggregate()函数返回聚合函数的值,常用的聚合函数有:Avg,Count,Max,Min,Sum
from django.db.models import Max
BookInfo.objects.aggregate(Max('bpub_date'))
  • 关联查询

一对多查询,语法:实例名(一方模型类对象).反向查询的模型类名(多方的模型类名)小写_set(也就是related_name).all()
条件筛选(已知表数据查询表数据):filter(外键__字段__运算符=值)

book = BookInfo.objects.get(id=1)
book.heroinfo_set.all() #模型类:HeroInfo

多对一查询,语法:实例名.外键名[.字段]
条件筛选(已知表数据查询表数据):filter(关联模型类名小写__字段__运算符=值)

person = HeroInfo.objects.get(id=1)
person.hbook #hbook为该模型类中的外键

分页

Django提供了一些类实现管理数据分页,这些类位于django/core/paginator.py中;
Paginator对象:Paginator(列表,int):返回分页对象,参数为列表数据,每面数据的条数

from django.core.paginator import Paginator
books = BookInfo.objects.all()
p = Paginator(books,2)
p.page(2)[0]#通过索引取值;Paginator对象的page()方法返回Page对象,不需要手动构造
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值