Django操作数据库查询的几种方式

基本查询

在这里插入图片描述

  • 查询BookInfo内id为1的数据
BookInfo.objects.get(id=1)
  • 查询所有数据
BookInfo.objects.all()
  • 查询所有数据的数量
BookInfo.objects.all().count()
过滤查询
  • 查询id为1的数据
BookInfo.objects.filter(id=1)
  • 模糊查询: 查询包含’ xx '字的图书
    包含:contains
BookInfo.objects.filter(btitle__contains='湖')
  • 模糊查询: 查询以 ’ xx ’ 字结尾的图书
    结尾: endswith
BookInfo.objects.filter(btitle__endswith='部')
  • 查询不为空的数据
    isnull 为空是True 不为空False
BookInfo.objects.filter(btitle__isnull=False)
  • 查询id为1,3,5的图书
BookInfo.objects.filter(id__in = [1,3,5])
  • 查询id大于3的图书
    __gt大于
    __gte大于等于
    __lt小于
    __lte小于等于
BookInfo.objects.filter(id__gt = 3)
  • 查询1980年发表的图书
    __year 匹配date日期的年份
BookInfo.objects.filter(bpub_date__year = 1980)
  • 查询1990年1月1日后发表的图书
    直接等于一个日期格式
BookInfo.objects.filter(bpub_date__gt = '1990-1-1')
F 、 Q 对象
F对象

使用之前要先导包 from django.db.models import F,Q
F 对象可以实现属性与属性之间的比较

  • 查询阅读量大于等于评论量的作品
    bread(阅读量)__gte(大于等于) = F('bcomment') 评论量
from django.db.models import F,Q
BookInfo.objects.filter(bread__gte = F('bcomment'))
  • 查询阅读量大于等于2倍的评论量
BookInfo.objects.filter(bread__gte = F('bcomment') * 2)
Q对象

Q对象可以实现MySQL里面的not 、and 、 or

  • 查询阅读量大于20 并且 id小于3的数据
    与或非: & | ~
BookInfo.objects.filter(Q(bread__gt=20) & Q(id__lt=3))
聚合函数

导包

from django.db.models import Avg, Count, Sum, Max, Min 

使用

# 求和
BookInfo.objects.aggregate(Sum('bread'))
# 求最大值
BookInfo.objects.aggregate(Max('bread'))
# 求最小值
BookInfo.objects.aggregate(Min('bread'))
# 求平均值
BookInfo.objects.aggregate(Avg('bread'))
order_by排序
BookInfo.objects.all().order_by('bread')

倒序

BookInfo.objects.all().order_by('-bread')
关联查询

一对多,查询“一”的那张表所有关联的“多”的信息

人物表添加的外键是书表的主键

b = BookInfo.objects.get(id=1)
b.heroinfo_set.all()

在这里插入图片描述

  • 先获取一个书类的对象
  • 对象.添加外键的类的表名_set.all()
  • 可以获取到所有关联当前对象的人物类对象列表
过滤查询

查询人物郭靖所在的书籍
关联模型类__属性名__条件运算符 = 'xxx'

BookInfo.objects.filter(heroinfo__hname='郭靖')

查询图书 书的英雄描述包含 ‘掌’

BookInfo.objects.filter(heroinfo__hdesc__contains = '掌')
一对多,查询“多”的那张表所有关联的“一”的信息

直接使用外键

h = HeroInfo.objects.get(id=5)
h.hbook
过滤查询

查询天龙八部里所有有英雄

HeroInfo.objects.filter(hbook__btitle = '天龙八部')

查询阅读量大于等于20的书的所有的英雄

HeroInfo.objects.filter(hbook__bread__gte = 20)
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Django是一个流行的Python Web框架,它提供了许多功能来简化数据库操作查询。在Django中,你可以使用ORM(对象关系映射)来查询数据库。ORM允许你将数据模型与数据库表分开,从而使得数据库操作更加灵活和易于管理。 Django提供了许多内置的数据库查询工具,包括以下几种: 1. 查询构建器:Django提供了强大的查询构建器,允许你使用SQL语句来构建查询。你可以使用`QuerySet`对象来构建查询,它提供了许多方法来过滤、排序、分组和连接数据。 2. 过滤器:Django查询构建器支持各种过滤器,例如`filter()`、`exclude()`、`order_by()`等,这些方法允许你根据条件对数据进行筛选和排序。 3. 关联查询Django支持关联查询,可以方便地查询多个表之间的关联数据。你可以使用`select_related()`、`prefetch_related()`等方法来执行关联查询,以提高性能和减少数据库交互次数。 4. 聚合查询Django查询构建器还支持聚合查询,可以用于计算总和、平均值、计数等统计信息。你可以使用`annotate()`、`aggregate()`等方法来进行聚合查询。 5. 数据库迁移:Django提供了数据库迁移工具,可以帮助你在开发过程中轻松地更新数据库结构。你可以使用`makemigrations`和`migrate`命令来创建和执行迁移文件,以更新数据库结构。 下面是一个简单的示例,展示了如何在Django中使用查询构建器和过滤器进行数据库查询: ```python from myapp.models import MyModel # 获取所有满足条件的模型实例 queryset = MyModel.objects.filter(status=1) # 按照指定字段排序 queryset = queryset.order_by('created_at') # 获取指定字段的总数 total = queryset.count() ``` 这只是一些基本的介绍,Django还提供了更多高级的查询功能和工具,可以根据具体需求进行学习和使用。你可以参考Django官方文档和教程,以获取更多关于数据库查询的详细信息和示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值