Python Django2 model 查询介绍(条件、范围、模糊查询)


Posted in Python onMarch 16, 2020

条件查询

范围查询

模糊查询

条件查询

all()

返回全部结果集

filter(**kwargs)

返回满足参数定义的结果集 例如

Entry.objects.filter(pub_date__year=2006)

exclude(**kwargs)

返回不满足参数定义的结果集 例如

Entry.objects.exclude(pub_date__year=2006)

链式查询

Entry.objects.filter(... 
  headline__startswith='What'... )
.exclude(...
   pub_date__gte=datetime.date.today()... )
.filter(...
   pub_date__gte=datetime.date(2005, 1, 30)... )

也可以这样

q1 = Entry.objects.filter(headline__startswith="What")
q2 = q1.exclude(pub_date__gte=datetime.date.today())
q3 = q1.filter(pub_date__gte=datetime.date.today())

或者

q = Entry.objects.filter(headline__startswith="What")
q = q.filter(pub_date__lte=datetime.date.today())
q = q.exclude(body_text__icontains="food")
get()

filter()返回的是一个结果集,如果你确定你要返回的是一条结果,那么就可以使用get() 例如

Entry.objects.get(pk=1)

get()与filter()区别

get()返回单一的一条记录,返回类型也是一个对象,filter()返回的实际一个结果集,返回类型为列表。
使用get(),如果查询结果为空,将会引起DoesNotExist exception,而filter()将会返回[]

范围查询

Limiting
Entry.objects.all()[:5]

将会返回前5条记录

Entry.objects.all()[5:10]

将会返回5~10条记录

order_by

排序

Entry.objects.order_by('headline')[0]

将会按照'headline'进行排序,然后返回第一条记录

语法:字段 + 两条下划线 + 内置查询字段

lt(lte): 小于(小于等于)

Entry.objects.filter(pub_date__lte='2006-01-01')

等同于

SELECT * FROM ... WHERE pub_date <= '2006-01-01';

gt(gte): 大于(大于等于)

in

Entry.objects.filter(id__in=[1,3])

模糊查询

range

常用来筛选出属于某个连续区间的对象

Entry.objects.filter(id__range=[1,3])
contains

包含‘xxx'(大小写敏感),常用于找出包含某些关键字的对象

Entry.objects.filter(type__name__contains='python')

等同于

SELECT ... WHERE name LIKE '%python%';

类似的有icontains (大小写不敏感)。注意contains是大小写敏感的,icontains是大小写不敏感的。

startswith

以‘xxx'开头(大小写敏感)

Entry.objects.filter(name__startswith='高级')

等同于

SELECT ... WHERE name LIKE '高级%';

类似的有istartswith (大小写不敏感)

endswith

以‘xxx'结尾(大小写敏感)

类似的有iendswith (大小写不敏感)

isnull

可设置为True或者False,用来筛选某字段 为NULL / 不为NULL 的对象

Entry.objects.filter(description__isnull=True)

等同

SELECT ... WHERE description IS NULL;

补充知识:Django filter **conditions多条件多字段过滤筛选数据

Application context 应用场景:

新增的一条数据不能与DB库里有的数据重复或者需要多条件/多字段筛选数据时需要用到 **conditions

conditions ={
  'server_ip': ip,
  "bk_biz_id": bk_biz_id,
  'cron_min': c["cron_min"],
  'cron_hour': c["cron_hour"],
  'cron_day': c["cron_day"],
  'cron_month': c["cron_month"],
  'cron_week': c["cron_week"],
  'cron_task': c["cron_task"],
  "creator": c["user"],
  "deleted": 0
}
query_set = CrontabInfo.objects.filter(**conditions)

以上这篇Python Django2 model 查询介绍(条件、范围、模糊查询)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中字典和集合学习小结
Jul 07 Python
python根据unicode判断语言类型实例代码
Jan 17 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
Nov 18 Python
PyTorch 1.0 正式版已经发布了
Dec 13 Python
把django中admin后台界面的英文修改为中文显示的方法
Jul 26 Python
Python3 chardet模块查看编码格式的例子
Aug 14 Python
关于Python-faker的函数效果一览
Nov 28 Python
Python flask框架实现浏览器点击自定义跳转页面
Jun 04 Python
Python实现上下文管理器的方法
Aug 07 Python
Pythonic版二分查找实现过程原理解析
Aug 11 Python
使用pytorch实现线性回归
Apr 11 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
Apr 28 Python
python高阶函数map()和reduce()实例解析
Mar 16 #Python
Django models filter筛选条件详解
Mar 16 #Python
python递归调用中的坑:打印有值, 返回却None
Mar 16 #Python
django 前端页面如何实现显示前N条数据
Mar 16 #Python
Python迭代器Iterable判断方法解析
Mar 16 #Python
python 递归调用返回None的问题及解决方法
Mar 16 #Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 #Python
You might like
几个学习PHP的网址
2006/11/25 PHP
php设计模式 Proxy (代理模式)
2011/06/26 PHP
PHP写的资源下载防盗链类分享
2014/05/12 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
2017/08/01 PHP
PHP实现简单登录界面
2019/10/23 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
JavaScript 对象模型 执行模型
2010/10/15 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
Javascript异步编程的4种方法让你写出更出色的程序
2013/01/17 Javascript
JavaScript中实现最高效的数组乱序方法
2014/10/11 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
2018/04/18 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
2019/10/17 Javascript
vue点击自增和求和的实例代码
2019/11/06 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
微信小程序实现底部弹出框
2020/11/18 Javascript
Vue router安装及使用方法解析
2020/12/02 Vue.js
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
python+opencv实现动态物体追踪
2018/01/09 Python
python实现两个文件夹的同步
2019/08/29 Python
HTML中fieldset标签概述及使用方法
2013/02/01 HTML / CSS
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
Final类有什么特点
2012/04/25 面试题
高中生学习的自我评价
2013/12/14 职场文书
行政办公员自我评价分享
2013/12/14 职场文书
大学生旷课检讨书
2014/01/22 职场文书
房产公证书样本
2015/01/23 职场文书
社区工作者个人总结
2015/02/28 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js
Java中的随机数Random
2022/03/17 Java/Android