orm最全宝典

一、基本查询

  • 1.查询编号为1的图书【两种方式】
BookInfo.objects.filter(id=1)  # 得到的是查询集
BookInfo.objects.get(id=1)  # 有且只有一个id=1的数据,才能正确
  • 2.查询所有图书的数量
BookInfo.objects.filter().count()
  • 3.查询书名包含雪山的图书【开头,结尾】
BookInfo.objects.filter(btitle__startswith='雪山')
BookInfo.objects.filter(btitle__endswith='雪山')
  • 4.查询书籍名不为空的书籍
book = BookInfo.objects.get(id=6)
book.btitle = None
book.save()
book = BookInfo.objects.filter(img__isnull=False)
print(book)
  • 5.查询书籍编号为1,3,5的图书
books = BookInfo.objects.filter(id__in=[1, 3, 5])
books = BookInfo.objects.filter(id__range=[1, 3])
print(books)
  • 6.查询编号大于3的图书
books = BookInfo.objects.filter(id__gt=3)
print(books)
  • 7.查询编号大于等于3的图书
books = BookInfo.objects.filter(id__gte=3)
print(books)
  • 8.查询编号不等于3的图书
books = BookInfo.objects.exclude(id=3)
print(books)
  • 9.查询1980年发表的图书
books = BookInfo.objects.filter(bpub_date__year='1980')
print(books)
  • 10.查询1980年1月1号之后发表的图书
books = BookInfo.objects.filter(bpub_date__gt='1990-01-01')
print(books)

二、关联过滤查询

根据关联的模型的属性过滤

  • 19.查询书籍编号为1,中的所有英雄
heros = HeroInfo.objects.filter(hbook_id=1)
print(heros)
book = BookInfo.objects.get(id=1)
heros = HeroInfo.objects.filter(hbook=book)
print(heros)
- 20.查询书籍名称为雪山飞狐的,所有的英雄
heros = HeroInfo.objects.filter(hbook__btitle='雪山飞狐')
print(heros)

  • 21.查询英雄编号为1,所属的图书
book = HeroInfo.objects.get(id=1).hbook
print(book.btitle)
  • 22.查询英雄中有乔峰的书籍
books = BookInfo.objects.filter(heroinfo__hname='乔峰')
print(books)
  • 23.查询英雄名字中包含‘郭’的书籍
books = BookInfo.objects.filter(heroinfo__hname__contains='不').distinct()
print(books)
  • 24.查询书籍阅读量大于30的书籍中的所有英雄
heros = HeroInfo.objects.filter(hbook__bread__gt=30)
print(heros)
  • 25.取1号图书中的所有英雄
book = BookInfo.objects.get(id=1)
print(book.heros.all())

三、FQ查询

  • 11.查询阅读量大于等于评论量的图书
books = BookInfo.objects.all()
book_list = []
for book in books:
    if book.bread>=book.bcomment:
        book_list.append(book)
BookInfo.objects.filter(bread__gte=F('bcomment'))
  • 12.查询阅读量大于等于2倍评论量的图书
BookInfo.objects.filter(bread__gte=F('bcomment')*2)
  • 13.查询阅读量大于20,并且编号小于3的图书
BookInfo.objects.filter(bread__gt=20, id__lt=3)
BookInfo.objects.filter(bread__gt=20).filter(id__lt=3)
  • 14.查询阅读量大于20,或编号小于3的图书, & | ~
books = BookInfo.objects.filter(Q(bread__gt=20) | Q(id__lt=3))
print(books)
  • 15.查询编号不等于3的图书,使用Q对象实现
books = BookInfo.objects.filter(~Q(id=3))
print(books)

四、聚合查询

  • 16.查询所有阅读量的总和
bread_sum = BookInfo.objects.all().aggregate(Sum('bread'))
print(bread_sum.get('bread__sum'))
  • 17.查询最大的评论量
# 平均数
bread_avg = BookInfo.objects.all().aggregate(Avg('bread'))
print(bread_avg)
# 最小数
bread_min = BookInfo.objects.all().aggregate(Min('bread'))
print(bread_min)
# 最大数
bread_max = BookInfo.objects.all().aggregate(Max('bread'))
print(bread_max)
  • 18.查询所有图书,按照阅读量排序,升序【降序】
print(BookInfo.objects.all().order_by('bread')[:3])
print(BookInfo.objects.all().order_by('-bread'))
  • 复杂的查询语句
    books = BookInfo.objects.filter(Q(id__gt=3) | Q(bread__gte=20)).order_by(‘bcomment’)[:3]
    print(books.query)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值