django------模糊查询

这篇具有很好参考价值的文章主要介绍了django------模糊查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.常用模糊查询的方法

 queryset中支持链式操作
book=Book.objects.all().order_by('-nid').first()

只要返回的是queryset对象就可以调用其他的方法,直到返回的是对象本身

大于、大于等于、小于、小于等于:
# __gt 大于>
# __gte 大于等于>=
# __lt 小于<
# __lte 小于等于<=

Student.objects.filter(age__gt=10) # 查询年龄大于10岁的学生
Student.objects.filter(age__gte=10) # 查询年龄大于等于10岁的学生
Student.objects.filter(age__lt=10) # 查询年龄小于10岁的学生
Student.objects.filter(age__lte=10) # 查询年龄小于等于10岁的学生
  • 特别注意:这里的下划线是双下划线
不等于/不包含于:
Student.objects.filter().excute(age=10)    # 查询年龄不为10的学生
Student.objects.filter().excute(age__in=[10, 20])  # 查询年龄不在 [10, 20] 的学生
数据库 like操作 模糊查询常用的操作
# __exact 精确等于 like 'aaa'
# __iexact 精确等于 忽略大小写 ilike 'aaa'
# __contains 包含 like '%aaa%'
# __icontains 包含,忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
# __startswith 以…开头
# __istartswith 以…开头 忽略大小写
# __endswith 以…结尾
# __iendswith 以…结尾,忽略大小写
# __range 在…范围内
# __year 日期字段的年份
# __month 日期字段的月份
# __day 日期字段的日

# 用法:
Book.objects.filter(title__exact="python")
#   等价于 title  like  'python'
Book.objects.filter(title__contains="python")
#   等价于 title  like  '%python%'
Book.objects.filter(title__icontains="python")  
# 忽略大小写 
Book.objects.filter(title__startswith="py")
# 等价于  title like 'py%'
Book.objects.filter(title__endswith="aa")
# 等价于  title like '%aa'

Book.objects.filter(pub_date__year=2012)
# 日期字段的2012年份

Student.objects.filter().excute(age=10) # 查询年龄不为10的学生
Student.objects.filter().excute(age__in=[10, 20]) # 查询年龄不在 [10, 20] 的学生
是否为空
User.objects.filter(username__isnull=True) # 查询用户名为空的用户
User.objects.filter(username__isnull=False) # 查询用户名不为空的用户
# a)判等 条件名:exact。
# 例:查询名字为abc的图书。
BookInfo.objects.filter(name="abc")  #等同于 BookInfo.objects.filter(name__exact="abc") 名称严格等于 "abc" 的人
BookInfo.objects.filter(name__iexact="abc")  # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件

# b)模糊查询(相当于sql的 like)
# 例:查询书名包含'传'的图书。contains
BookInfo.objects.filter(btitle__contains='传')
# 例:查询书名以'部'结尾的图书 endswith 开头:startswith
BookInfo.objects.filter(btitle__endswith='部')

# c)空查询 isnull
# 例:查询书名不为空的图书。isnull 
select * from booktest_bookinfo where btitle is not null;
BookInfo.objects.filter(btitle__isnull=False)

# d)范围查询 in
# 例:查询id为1或3或5的图书。
select * from booktest_bookinfo where id in (1,3,5);
BookInfo.objects.filter(id__in = [1,3,5])

# e)比较查询 gt(greate than) lt(less  than) gte(equal) 大于等于
# lte 小于等于
# 例:查询id大于3的图书。
Select * from booktest_bookinfo where id>3;
BookInfo.objects.filter(id__gt=3)

# f)日期查询
# 例:查询1980年发表的图书。
BookInfo.objects.filter(bpub_date__year=1980)
# 例:查询1980年1月1日后发表的图书。
from datetime import date
BookInfo.objects.filter(bpub_date__gt=date(1980,1,1))

# g)range在...范围内
BookInfo.objects.filter(name__regex="^abc")  # 正则表达式查询
BookInfo.objects.filter(name__iregex="^abc")  # 正则表达式不区分大小写

# exclude(返回不满足条件的数据。)方法示例:
# 例:查询id不为3的图书信息。
BookInfo.objects.exclude(id=3)
User.objects.filter().excute(age=10) // 查询年龄不为10的用户
User.objects.filter().excute(age__in=[10, 20]) // 查询年龄不为在 [10, 20] 的用户

# order_by(对查询结果进行排序)方法示例:
# 作用:进行查询结果进行排序。默认是升序,在条件里加“-”表示降序
# 例:查询所有图书的信息,按照id从小到大进行排序。
BookInfo.objects.all().order_by('id')

# 例:查询所有图书的信息,按照id从大到小进行排序。
BookInfo.objects.all().order_by('-id')

# 例:把id大于3的图书信息按阅读量从大到小排序显示。
BookInfo.objects.filter(id__gt=3).order_by('-bread')
多表连接查询:
 class A(models.Model):
    name = models.CharField(u'名称')
 class B(models.Model):
    aa = models.ForeignKey(A)
 
B.objects.filter(aa__name__contains='searchtitle')
# 查询B表中外键aa所对应的表中字段name包含searchtitle的B表对象。
总结
  1. exclude():       ---------不包含
# exclude(**kwargs)
# 返回一个新的QuerySet,它包含不满足给定的查找参数的对象
 
Student.objects.exclude(age__gt=20, name='lin')#排除所有年龄大于20岁且名字为“lin”的学员集

2.annotate():       ---------------------聚合函数需要用到

annotate(args, *kwargs)
 
# 使用提供的聚合表达式查询对象。
# 表达式可以是简单的值、对模型(或任何关联模型)上的字段的引用或者聚合表达式(平均值、总和等)。
# annotate()的每个参数都是一个annotation,它将添加到返回的QuerySet每个对象中。
# 关键字参数指定的Annotation将使用关键字作为Annotation 的别名。 匿名参数的别名将基于聚合函数的名称和模型的字段生成。 只有引用单个字段的聚合表达式才可以使用匿名参数。 其它所有形式都必须用关键字参数。
# 例如,如果正在操作一个Blog列表,你可能想知道每个Blog有多少Entry:
>>> from django.db.models import Count
>>> q = Blog.objects.annotate(Count('entry'))
# The name of the first blog
>>> q[0].name
'Blogasaurus'
# The number of entries on the first blog
>>> q[0].entry__count
42
  1. order_by():     排序
order_by(*fields)
 
# 默认情况下,根据模型的Meta类中的ordering属性对QuerySet中的对象进行排序
Student.objects.filter(school="阳关小学").order_by('-age', 'name')
# 上面的结果将按照age降序排序,然后再按照name升序排序。"-age"前面的负号表示降序顺序。 升序是默认的。 要随机排序,使用"?",如下所示:
Student.objects.order_by('?')
  1. reverse(): -------反向排序
# reverse()
# 反向排序QuerySet中返回的元素。 第二次调用reverse()将恢复到原有的排序。
# 如要获取QuerySet中最后五个元素,可以这样做:
my_queryset.reverse()[:5]
# 这与Python直接使用负索引有点不一样。 Django不支持负索引。
distinct()    ---------去重
distinct(*fields)
# 去除查询结果中重复的行。
# 默认情况下,QuerySet不会去除重复的行。当查询跨越多张表的数据时,QuerySet可能得到重复的结果,这时候可以使用distinct()进行去重。

values()

values(fields, *expressions)
 
# 返回一个包含数据的字典的queryset,而不是模型实例。
 
# 每个字典表示一个对象,键对应于模型对象的属性名称。如:
 
# 列表中包含的是Student对象
>>> Student.objects.filter(name__startswith='Lin')
<QuerySet [<Student: Lin Student>]>
 
# 列表中包含的是数据字典
>>> Student.objects.filter(name__startswith='Lin').values()
<QuerySet [{'id': 1, 'name': 'Linxiao', 'age': 20}]>
 
# 另外该方法接收可选的位置参数*fields,它指定values()应该限制哪些字段。如果指定字段,每个字典将只包含指定的字段的键/值。如果没有指定字段,每个字典将包含数据库表中所有字段的键和值。如下:
>>> Student.objects.filter(name__startswith='Lin').values()
<QuerySet [{'id': 1, 'name': 'Linxiao', 'age': 20}]>
 
>>> Blog.objects.values('id', 'name')
<QuerySet [{'id': 1, 'name': 'Linxiao'}]>

values_list()文章来源地址https://www.toymoban.com/news/detail-609141.html

values_list(*fields, flat=False)
 
# 与values()类似,只是在迭代时返回的是元组而不是字典。每个元组包含传递给values_list()调用的相应字段或表达式的值,因此第一个项目是第一个字段等。 像这样:
>>> Student.objects.values_list('id', 'name')
<QuerySet [(1, 'Linxiao'), ...]

到了这里,关于django------模糊查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python智能家居系统后端源码,基于Django+MQTT+ESP8266的智能家居系统源码

    代码下载地址:Python智能家居系统后端源码 服务器硬件环境: 处理器:Intel® Xeon® CPU E5-2680 v4 @ 2.40GHz 1核 内存:2GB 硬盘空间:60GB 单片机环境: 单片机:ESP8266-12E NodeMCU 开发环境:Arduino IDE(1.8.19) 软件环境: 操作系统:Ubuntu 18.04 LTS 编程语言:Python(3.7.9) Web后端框架:

    2024年02月02日
    浏览(62)
  • python爬虫_django+vue+echarts可视化查询所有CSDN用户质量分

    大家好,我是yma16,本文分享关于前后分离django+vue+echarts可视化查询CSDN用户质量分。 该系列文章: python爬虫_基本数据类型 python爬虫_函数的使用 python爬虫_requests的使用 python爬虫_selenuim可视化质量分 ⭐ 效果 项目部署在inscode上:https://yma16.inscode.cc/ 表格展示文章评分 echarts图

    2024年02月12日
    浏览(64)
  • Django后端开发——Django应用及分布式路由

    B站网课:点击蓝色字体跳转 或者复制链接在浏览器打开:https://www.bilibili.com/video/BV1vK4y1o7jH?p=14vd_source=597e21cf34ffcdce468ba00be2177e8a 终端: 在settings.py的INSTALLED_APPS中添加应用名即可 news开头的交由news管理 music开头的交由music管理 Step1 - 主路由中调用include函数 语法:include(‘app名

    2024年02月19日
    浏览(61)
  • 【后端】Django与Django REST Framework的结合使用

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 随着开发语言及人工智能工具的普及,使得越来越多的人会主动学习使用一些开发语言,本文主要介绍Django与Django REST Framework的结合使用。 创建Django项目通常包括以下步骤: 安装Django : 首先,确保你的

    2024年04月26日
    浏览(36)
  • Django后端开发——静态文件

    B站网课:点击蓝色字体跳转 或者复制网址在浏览器访问:https://www.bilibili.com/video/BV1vK4y1o7jH?p=13vd_source=597e21cf34ffcdce468ba00be2177e8a 如:图片、css、js、音频、视频 以下一行代码是手动添加的,指定了一个目录——‘static’,将在该目录下查找静态文件 模板中访问静态文件 - im

    2024年02月19日
    浏览(130)
  • django自定义后端过滤

    ​ 第一个 DjangoFilterBackend 是需要安装三方库见[搜索:多字段筛选] 两外两个是安装注册了rest_framework就有。 如上图,只要配置了三个箭头所指的方向,就能使用。 用户视图集中加上filterset_fields 后,后端搜索过滤就生效了 特点 : 是准确匹配,如搜王老五,能搜索来,搜 老

    2024年02月22日
    浏览(38)
  • 二挡起步——pythonweb开发Django框架,前端原生+Django后端框架002(附带小案例)

     大家好,我是csdn的博主: lqj_本人 这是我的个人博客主页: lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主 lqj_本人擅长微信小程序,前端,python,等方面的知识 https://blog.csdn.net/lbcyllqj?spm=1011.2415.3001.5343 哔哩哔哩欢迎关注: 小淼Develop 小淼Develop的个人空间-小淼Develop个

    2024年02月03日
    浏览(81)
  • Django基础入门⑫:Django 对象查询详解,分组聚合

    🏘️🏘️个人简介:以山河作礼。 🎖️🎖️: Python领域新星创作者,CSDN实力新星认证,阿里云社区专家博主,CSDN内容合伙人 🎁🎁:Web全栈开发专栏:《Web全栈开发》免费专栏,欢迎阅读! 🎁🎁: 文章末尾扫描二维码可以加入粉丝交流群,不定期免费送书。 F对象查询与

    2024年02月12日
    浏览(58)
  • Django后端开发——模型层及ORM介绍

    B站网课:点击蓝色字体跳转 或者复制链接到浏览器打开:https://www.bilibili.com/video/BV1vK4y1o7jH?p=15vd_source=597e21cf34ffcdce468ba00be2177e8a 一般都有python3-dev,没有default-libmysqlclient-dev,需要安装default-libmysqlclient-dev 然后安装mysqlclient 若安装default-libmysqlclient-dev时报错‘pkg-config: not found’

    2024年02月19日
    浏览(130)
  • Django proxy_view代理后端

    某些需求下,需要通过Django代理后端,比如开发celery定时任务时候,需要代理后端的flower,代理后端可以直接使用Django自带的授权,方便权限控制 具体操作如下 1.安装 django-proxy 包,进行代理 2.编写view,用与代理后端flower settings.py中添加下面配置  flower.py文件如下 添加url路

    2024年02月12日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包