Django ORM 模糊查询实例解析

Django项目中的ORM映射与模糊查询 一丧:我也不想堕落 可我没有快乐 ORM映射 什么是ORM映射?在笔者认为就是对SQL语句的封装,所写语句与SQL对应语句含义相同,使开发更加简单方便,不过也是存在弊端的,使程序运行效率下降。例如: UserInfo.objects.get(id=2) 等于 select * from user_userinfo where id=2 修改管理器(models.py) 导入新... 阅读详情

        在 Django 中,对象关系映射 (ORM) 系统提供了一种强大而直观的数据库交互方式。本博文将深入探讨 Django ORM 中的高级单表查询方法和模糊查询选项,使开发人员能够高效地检索和操作数据。

        模糊查询是一种非常有用的功能,允许我们根据特定条件来过滤数据库中的数据。在本篇博客中,主要介绍几种常见的模糊查询方法,并提供相应的示例代码和查询结果。通过这些示例,我们可以清楚地了解如何在Django中使用模糊查询来过滤数据库中的数据。

一、 带双下划线的模糊查询

1、 价格大于50的书籍

要查询价格大于50的书籍,我们可以使用`filter`方法结合`__gt`(大于)参数来实现。
```
ret = Book.objects.filter(price__gt=50)

# 查询结果:[<Book: 111>, <Book: linux>, <Book: java>, <Book: 西游记>, <Book: 水浒传>]
```
此查询将返回价格超过 50 的图书。

2、 价格大于等于50的书籍

同样,如果我们需要查询价格大于等于50的书籍,可以使用`__gte`(大于等于)参数。
```
ret = Book.objects.filter(price__gte=50)

# 查询结果:[<Book: 111>, <Book: linux>, <Book: java>, <Book: 西游记>, <Book: 水浒传>]
```
此查询将返回价格等于或大于 50 的图书。

3、 名称以特定字符串开头的书籍

若要查询名称以特定字符串开头的所有书籍名称,我们可以使用`__startswith`参数。例如,要检索名称以 "li "开头的图书,使用 `__startswith` 操作符:

```
ret = Book.objects.filter(name__startswith="li").values("name")
# 查询结果:[{'name': 'linux'}]
```

此查询将返回名称以 "li "开头的图书名称。

4、 特定日期范围内的书籍

最后,如果需要查询特定日期范围内的书籍,可以使用`__year`和`__month`参数。例如,要检索 2024 年 2 月出版的图书,使用 `__year` 和 `__month` 操作符:

```
ret = Book.objects.filter(pub_date__year=2024, pub_date__month=2)
# 查询结果:[<Book: 飘>, <Book: 红楼梦>, <Book: 水浒传>]
```
此查询将检索 2024 年 2 月出版的图书。

5、 大小写不敏感的名称匹配

Django ORM 提供了执行大小写不敏感匹配的模糊查询选项。例如,要检索名称中包含 "li "的书籍,无论大小写如何,可以使用 `__icontains`操作符:
```
ret = Book.objects.filter(name__icontains="li")
```
此查询将以不区分大小写的方式检索名称包含 "li "的图书。

6、 高级模糊匹配

除了大小写不敏感匹配外,Django ORM 还支持使用 `__contains` 操作符进行高级模糊匹配:
```
ret = Book.objects.filter(name__contains="li")
```
此查询将检索名称包含 "li "的图书。

二、代码演示

############### 模糊查询(双下划线) ##################
def query(request):
    # 查询价格大于50的书籍
    # ret=Book.objects.filter(price__gt=50)
    # SELECT `app01_book`.`id`, `app01_book`.`name`, `app01_book`.`price`, `app01_book`.`pub_date`,
    # `app01_book`.`publish` FROM `app01_book` WHERE `app01_book`.`price` > 50 LIMIT 21
    # print(ret)
    # < QuerySet[ < Book: 111 >, < Book: linux >, < Book: java >, < Book: 西游记 >, < Book: 水浒传 >] >

    # 查询价格大于等于50的书籍
    # ret = Book.objects.filter(price__gte=50)
    # SELECT `app01_book`.`id`, `app01_book`.`name`, `app01_book`.`price`, `app01_book`.`pub_date`,
    # `app01_book`.`publish` FROM `app01_book` WHERE `app01_book`.`price` >= 50 LIMIT 21
    # print(ret)
    # < QuerySet[ < Book: 111 >, < Book: linux >, < Book: java >, < Book: 西游记 >, < Book: 水浒传 >] >

    # 查询名称以li开头的所有书籍名称
    # ret=Book.objects.filter(name__startswith="li").values("name")
    # SELECT `app01_book`.`name` FROM `app01_book` WHERE `app01_book`.`name` LIKE BINARY 'li%' LIMIT 21
    # ret=Book.objects.filter(name__istartswith="li").values("name")
    # __istartswith 不区分大小写
    # ret=Book.objects.filter(name__contains="li").values("name")
    # __contains:包含 , __icontains: 不区分大小写 包含
    # print(ret)
    # < QuerySet[{'name': 'linux'}] >

    # 查询2024年2月的所有书籍
    # ret=Book.objects.filter(pub_date__year=2024,pub_date__month=2)
    # SELECT `app01_book`.`id`, `app01_book`.`name`, `app01_book`.`price`, `app01_book`.`pub_date`,
    # `app01_book`.`publish` FROM `app01_book` WHERE(extract (MONTH  FROM `app01_book`.`pub_date`) = 2
    # AND `app01_book`.`pub_date`  BETWEEN '2024-01-01 00:00:00' AND '2024-12-31 23:59:59.999999') LIMIT 21;
    # print(ret)
    # <QuerySet [<Book: 飘>, <Book: 红楼梦>, <Book: 水浒传>]>

    return HttpResponse("query success")

三、总结        

        通过利用 Django ORM 中这些先进的单表查询方法和模糊查询选项,可以根据自己的特定需求精确地过滤和检索数据,从而使应用程序更加健壮和高效。

drf小练习——使用django_filters写模糊查询 【代码】drf小练习——使用django_filters写模糊查询。 阅读详情

相关推荐

LintCode Django ORM查询题目详解

1947 : 使用虚拟环境requirements.txt构建Django 1948 : 实现视图函数,在网页上输出”hello,world“ 未完待续

wwxy1995的博客 374

Django ORM 模糊查询和查询操作

queryset中支持链式操作 book=Book.objects.all().order_by('-nid').first() 只要返回的是queryset对象就可以调用其他的方法,直到返回的是对象本身 模糊查询常用的操作 大于、大于等于: __gt 大于> __gte 大于等于>= Student.objects.filter(age__gt=10) ...

aixie0138的博客 1242

Django框架基础知识(面试题)

Django框架 1.Django创建项目的命令 django-admin startproject 项目名称 python manage.py startapp 应用app名 2.Django创建项目后,项目文件夹下的组成部分 此题考的是学员对MVT的理解 项目文件夹下的组成部分: manage.py 是项目运行的入口,指定配置文件路径。与项目同名的目录,包含项目的配...

诗 人 说 梦 の СSDN 1万+

django------模糊查询

exclude(): ---------不包含# 返回一个新的QuerySet,它包含不满足给定的查找参数的对象Student.objects.exclude(age__gt=20, name='lin')#排除所有年龄大于20岁且名字为“lin”的学员集2.annotate(): ---------------------聚合函数需要用到# 使用提供的聚合表达式查询对象。# 表达式可以是简单的值、对模型(或任何关联模型)上的字段的引用或者聚合表达式(平均值、总和等)。

淘淘桃的博客 3003

Appsflyer S2S事件上报实战:从参数获取到避坑指南(附Firebase对比)

本文详细解析了Appsflyer S2S事件上报的实战技巧,包括核心参数获取、测试环境搭建、生产环境最佳实践以及高级场景处理。通过对比Firebase的事件上报机制,帮助开发者高效避坑并优化数据上报流程,提升应用分析与营销效果。

egg99的博客 885

深信服上网行为管理设备登录方法、恢复出厂、恢复控制台密码

1.初识设备 1.1 设备外观 1.2 软件版本 2.如何登录设备 首次拿到AC/SG设备时,可以通过以下方法登录设备控制台 SANGFOR AC/SG设备,各网口默认的出厂IP为: eth0(LAN):10.251.251.251/24 , eth1(DMZ)10.252.252.252/24 1、使用一根交叉线连接设备和电脑 (1) 如果电脑连接的是设备的eth0口,需先在电脑上配...

✍千里之行,始于足下 ^,^ 5万+

Django filter中contains和icontains区别

django的filter过滤集合的功能有contains和icontains字段,那么这两个有什么区别呢 举个样例说明 students = students.filter(name__contains=bob) students = students.filter(name__icontains=bob) 这里我们选出所有叫bob的学生 会发现第一条语句会选出所有的bob 第二条语句则会把叫...

xxx 6290

从公式到实践:用SPSS解锁香农多样性指数的生态洞察

本文详细介绍了如何利用SPSS软件计算和应用香农多样性指数进行生态研究。从基础公式解析到SPSS实战操作,再到生态决策支持,全面展示了该指数在物种丰富度和均匀度量化中的价值。文章特别强调了SPSS操作中的关键技巧和常见误区,为生态研究者提供了一套完整的分析解决方案。

weixin_30832143的博客 466

Django ORM语法进阶

文章目录Django的第六次链接单表操作必知必会13条查看内部sql语句的方式神奇的双下划线查询一对多外键增删查改多对多外键增删查改正反向概念多表查询案例子查询(基于对象的跨表查询)联表查询(基于双下划线的跨表查询) Django的第六次链接 ORM语法进阶 单表操作 在操作前可以先配置好测试环境,方便对数据库进行测试 1. 在tests.py文件中写入下面代码 (任意新建一个文件也行) import os if __name__ == "__main__": os.environ.set

go|Python的个人博客 631

Datawhale~数据挖掘实践之序列问题处理~天池·资金流入流出预测-挑战Baseline~Day01~数据探索与分析

写在前面✍ 本系列笔记基于天池平台上“资金流入流出预测-挑战Baseline”学习赛,记录如何完整的打一次数据挖掘类比赛。同时,该比赛属于序列建模问题,希望学习完成这个任务,可以对序列问题的处理有一定的独立思考能力和实践操作能力,可以将所学理论,用编码的形式和实际的问题得到深入。 第一篇,EDA Content: 初步了解赛题及数据 1.1 任务 1.2 用户基本信息数据 1.3 用户申购赎回数据 1.4 收益率表 1.5 银行间拆借利率表 1.6 提交格式 1.7 评分指标 EDA 1 初.

小卜妞的博客 2360

从轻量化到高精度:3DXML 转 STP 的工程数据升级技术指南

本文详细解析了3DXML转STP格式的工程数据升级技术,对比了两种格式在轻量化和高精度方面的特性差异,并提供了CATIA、FreeCAD及Python编程等多种专业级转换方案。通过实际案例展示了如何确保转换过程中的数据精度,适用于CAD设计、精密制造等场景,帮助工程师实现工程数据的高效升级。

weixin_29201859的博客 215

django 默认查询条件_Django数据库-ORM查询条件

下面将解释django的ORM查询语句的使用,用下面的方式可以直接查询到ORM,解析的结果print(article.query)tips:在windos环境下,查询排序规则(colltion)默认对大小写不敏感;而在linux下当设置成排序规则__bin的格式时,是对大小写敏感的;exact 与 iexact (类似等于)exact 相当于SQL语句中的等号(=);iexact 相当于SQL语句...

weixin_39914938的博客 288

全网最详细单细胞保姆级分析教程(一) ---pbmc

通过观察热图,可以了解不同细胞在主成分上的分布情况,以及主成分与细胞特征之间的关系。数据归一化是数据分析中的常见步骤,旨在消除数据集中不同特征之间的量纲差异,并使它们在相同的尺度上进行比较。函数会根据指定的主成分维度计算数据点之间的距离,并找到每个数据点的邻居。函数会根据数据点之间的相似性将其分组到不同的聚类中。数据缩放是数据分析中的常见步骤,旨在将数据的特征值调整到相似的范围,以避免某些特征对分析结果的过度影响。通过可视化维度载荷,可以了解哪些特征对主成分的形成起到了重要作用,以及不同特征之间的相关性。

ZxVSaccount的博客 6711

Django ORM查询技巧全解析

查询场景核心语法 / 方法示例多方查一方多方对象。外键字段一方查多方(ID 过滤)Book.objects.filter(press_id=一方ID)一方查多方(跨表联查)Book.objects.filter(外键__一方字段=条件)filter(press__pressname__contains="清华")反向查询(默认)一方对象。多方类名小写_set.all ()反向查询(自定义)一方对象.related_name.all ()(需定义 related_name)跨表指定字段。

weixin_72163837的博客 1320

ATT MTU 交换机制:提升 BLE 数据传输效率的关键

在低功耗蓝牙(BLE)技术的面试中,ATT MTU 交换机制始终是高频考点。无论是芯片厂商的固件开发岗,还是物联网设备的协议栈调试岗,面试官都爱通过这个知识点考察候选人对 BLE 数据传输底层逻辑的理解。本文将系统梳理核心考点,结合历年真题详解应答思路,轻松应对这类问题。​

byte轻骑兵的技术小窝 2411

YOLOv11改进 | 损失函数改进篇 | 2024最新高质量的目标检测边界框回归损失Unified-IoU、FocalUIoU、FocalInvUIoU(设置动态epoch参数)

本文给大家带来的改进机制是最近新提出的高质量的目标检测边界框回归损失,其通过动态调整模型对不同质量预测框的关注,优化目标检测中的边界框回归精度。UIoU引入了FocalBox方法,通过缩放预测框与真实框分配权重,并采用了退火策略(引入动态参数epoch),逐渐将模型的注意力从低质量预测框转移到高质量预测框,平衡了训练速度与检测精度。其还有一定的解决样本不平衡问题,同时该损失函数可以和现有的任何边界框回归损失函数进行结合,例如ShapeIoU和其结合可以形成二次创新,它是一种类似于之前的Inner的机制.

Snu77的博客 4589

Python import的规则,Django通过ORM建立数据库的映射以及crud

关于import的路径问题 语法:from .file(文件名) import class(类名),或者直接import .file.class 1.同级模块,即要导入同级目录下另一文件file1中的类名时,上述语法均可(from .file1 import *) 2.需导入的类所在的文件在下一级目录,即下级文件夹a1,文件名class1,须导入的类class2 测试语句 3.导入上级目录,需要用到sys类库设置当前路径为上级路径 总结:要注意 . 为当前目录 imp...

Mr_Joer的博客 1449

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Djano-orm

orm 1. 配置环境 在项目的setting中配置数据库的相关信息 DATABASES = { 'default':{ 'ENGINE':'...mysql', 'NAME':'库名', 'HOST':'127.0.0.1', 'PORT':3306, 'USER':'root', 'PASSWORD':'123' } } 在项目的init文件中配置 ...

优快云zhaojiale的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Django ORM模糊查询 contains和Icontains区别

Django filter中用contains和icontains区别 qs.filter(name__contains="e") qs.filter(name__icontains="e") 对应sql 'contains': 'LIKE BINARY %s', 'icontains': 'LIKE %s', 其中的BINARY是精确大小写 而’icontains’中的’i’表示忽略大小写 ...

d294083434的博客 2029

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

orm单表操作

### 一、内容回顾 #### 1. URL反向解析 ​ ```python path('login/', views.login, name="login"), ``` 1. 视图中使用 ```python from django.urls import reverse url = reverse("login") ``...

weixin_42127687的博客 203

django--orm操作

一 必知必会13条:   返回对象列表的:     1.all() :查所有     2.filter() :查一行     3.exclude():排除(里面可以写条件,意思除了这个条件的所有)     4.order_by():默认升序(可以写条件,加符号为降序)     5.reverse() :它是对已经排好序的基础上进行翻转。     6.distinct():...

weixin_30249203的博客 71

ORM

ORM是什么   ORM实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于数据库,通过简单的配置就可以轻松更换数据库,这减轻了开发人员的工作量.    对象和关系型数据库的映射 必会13条: 1. 返回对象列表的 all() Book.objects.all() filter() exclude() order_by() reverse()...

weixin_30950237的博客 130

Django 模型类与数据库(六)

一、Django ORM Django 模型使用自带的 ORM。 对象关系映射(Object Relational Mapping,简称 ORM )用于实现面向对象编程语言里不同类型系统的数据之间的转换。 ORM 在业务逻辑层和数据库层之间充当了桥梁的作用。 ORM 是通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。 ORM 的好处: 提高开发效率。 不同数据库可以平滑切换。 ORM 的缺点: ORM 代码转换为 SQL 语句时,需要花费一定的时间,执行.

分享我的点点滴滴,在成长路上与你同行! 561

Django开发中SQL注入防御:从ORM安全到原生SQL安全实践

SQL注入是一种通过构造恶意输入来篡改后端SQL语句执行逻辑的攻击方式,其原理在于应用程序未对用户输入进行充分验证和隔离,导致数据与代码混淆。这种攻击会直接破坏数据完整性、泄露敏感信息,并可能绕过业务逻辑权限控制。在Web开发实践中,防御SQL注入是保障应用安全的底线要求。对于使用Django框架的开发者而言,虽然其ORM(对象关系映射)默认采用参数化查询机制,能有效隔离查询逻辑与数据参数,但在执行复杂原生SQL、动态排序或使用extra()方法等场景下,仍需警惕安全风险。本文聚焦于Django项目中的SQ

掬水月在手,弄花香满衣 442

Django ORM单表操作实战:从CRUD到性能优化全解析

ORM(对象关系映射)是现代Web开发中连接业务逻辑与数据库的核心工具,它将数据库行与Python对象无缝转换,同时自动生成SQL、安全拼接参数并封装结果集。理解ORM的惰性求值机制与QuerySet缓存行为,是避免重复查库和隐性性能问题的关键。从模型字段设计到增删改查,从链式过滤到分组聚合,ORM在单表业务中既提供标准化的读写接口,又兼顾并发安全与查询效率。实际工程中,无论是内容后台的文章管理,还是高频数据统计,掌握Django ORM的单表操作都能大幅降低SQL拼写错误和数据不一致风险,并为后续多表关联

weixin_34116482的博客 155
上一篇: Django ORM 中高级单表查询 API(2)
下一篇: 设置Django中的静态文件
python_198
博客等级 码龄3年 359粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

python_198

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值