返回介绍

基本查询

发布于 2023-06-06 16:30:43 字数 9465 浏览 0 评论 0 收藏 0

基本查询

  • 运算符如下:
    • exact:表示判等
    • contains:是否包含
    • startswith、endswith:以指定值开头或结尾
    • isnull:是否为null
    • in:是否包含在范围内
    • gt、gte、lt、lte:大于、大于等于、小于、小于等于
    • 不等于方案一:使用exclude()方法
    • year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算
    • F对象
    • Q对象

示例

exact:表示判等

  • 例:查询编号为1的图书
list=BookInfo.books.filter(id__exact=1)
可简写为:
list=BookInfo.books.filter(id=1)

查询等

contains:是否包含

  • 说明:如果要包含%无需转义,直接写即可
  • 例:查询书名包含‘传’的图书
list = BookInfo.books.filter(btitle__contains='传')

模糊查询1

startswith、endswith:以指定值开头或结尾

  • 例:查询书名以‘部’结尾的图书
list = BookInfo.books.filter(btitle__endswith='部')

模糊查询2

isnull:是否为null

  • 例:查询书名不为空的图书
list = BookInfo.books.filter(btitle__isnull=False)

空查询

  • 以上运算符都区分大小写,在这些运算符前加上i表示不区分大小写,如iexact、icontains、istartswith、iendswith

in:是否包含在范围内

  • 例:查询编号为1或3或5的图书
list = BookInfo.books.filter(pk__in=[1, 3, 5])

范围查询

gt、gte、lt、lte:大于、大于等于、小于、小于等于

  • 例:查询编号大于3的图书
list = BookInfo.books.filter(id__gt=3)

比较查询

  • 不等于使用等于的运算符,使用exclude()过滤器
  • 例:查询编号不等于3的图书
list = BookInfo.books.exclude(id=3)

不等查询

year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算

  • 例:查询1980年发表的图书
list = BookInfo.books.filter(bpub_date__year=1980)

日期查询1

  • 例:查询1980年1月1日后发表的图书
list = BookInfo.books.filter(bpub_date__gt=date(1990, 1, 1))

日期查询2

F对象

  • 之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢? 答:使用F对象,被定义在django.db.models中
  • 语法如下
F(属性名)
  • 例:查询阅读量大于等于评论量的图书
from django.db.models import F
...
list = BookInfo.books.filter(bread__gte=F('bcommet'))

F1

  • 可以在F()对象上使用算数运算
  • 例:查询阅读量大于2倍评论量的图书
list = BookInfo.books.filter(bread__gt=F('bcommet') * 2)

F2

Q对象

  • 多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字
  • 例:查询阅读量大于20,并且编号小于3的图书
list=BookInfo.books.filter(bread__gt=20,id__lt=3)
或
list=BookInfo.books.filter(bread__gt=20).filter(id__lt=3)

逻辑与

  • 如果需要实现逻辑或or的查询,需要使用Q()对象结合|运算符
  • Q对象被义在django.db.models中
  • 语法如下
Q(属性名__运算符=值)
  • 例:查询阅读量大于20的图书,改写为Q对象如下
from django.db.models import Q
...
list = BookInfo.books.filter(Q(bread__gt=20))

逻辑或1

  • Q对象可以使用&、|连接,&表示逻辑与,|表示逻辑或
  • 例:查询阅读量大于20,或编号小于3的图书,只能使用Q对象实现
list = BookInfo.books.filter(Q(bread__gt=20) | Q(pk__lt=3))

逻辑或2

  • Q对象前可以使用~操作符,表示非not
  • 例:查询编号不等于3的图书
list = BookInfo.books.filter(~Q(pk=3))

逻辑非

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文