对Django项目中的ORM映射与模糊查询的使用详解


Posted in Python onJuly 18, 2019

ORM映射

什么是ORM映射?在笔者认为就是对SQL语句的封装,所写语句与SQL对应语句含义相同,使开发更加简单方便,不过也是存在弊端的,使程序运行效率下降。例如:

UserInfo.objects.get(id=2)

等于

select * from user_userinfo where id=2

修改管理器(models.py)

导入新的包:from django.db import models

进行模糊查询

开始进行查找前我们先来认识filter()方法。

这是一个过滤器方法用于过滤掉不符合条件的元素。

值得一提的是其内自带方法函数的引用方式为‘__方法名称'。

__exact 精确等于 like ‘aaa'

__iexact 精确等于 忽略大小写 ilike ‘aaa'

__contains 包含 like ‘%aaa%'

__icontains 包含 忽略大小写 ilike ‘%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。

__gt 大于

__gte 大于等于

__lt 小于

__lte 小于等于

__in 存在于一个list范围内

__startswith 以…开头

__istartswith 以…开头 忽略大小写

__endswith 以…结尾

__iendswith 以…结尾,忽略大小写

__range 在…范围内

__year 日期字段的年份

__month 日期字段的月份

__day 日期字段的日

__isnull=True/False

举几个例子:

obj1 = UserInfo.objects.filter(user_name__contains='王')#以‘王'开头的user__name
obj2 = UserInfo.objects.filter(user_name__endswith='王')#以‘王'结尾的user__name
obj3 = UserInfo.objects.filter(id__gte=5)#ID大于等于5的
obj5 = UserInfo.objects.filter(id__exact=5)#id等于5的
obj6 = UserInfo.objects.filter(id__in=[1,3,5])#id等于1,3,5,的

exclude方法,排除选项。

obj8 = UserInfo.objects.filter(password='123456',id__gt=2).exclude(phone=188)
#找到符合filter的内容后排除phone等于188的,它的另一种写法为
from django.db.models import Q
obj = UserInfo.objects.filter(Q(password='123456') & Q(id__gt=2) & ~Q(phone=188))

计算和和最大值:

from django.db.models import Sum,Max,Min
obj = UserInfo.objects.aggregate(Sum('id'))
obj = UserInfo.objects.aggregate(Max('id'))
obj = UserInfo.objects.aggregate(Min('id'))

统计个数

print(UserInfo.objects.count())#注:print只可于终端查看

范围查找

obj = UserInfo.objects.all()[1:3]#左闭右开,只查找了1和2

去重复

obj = person.useraddress_set.all()

而get方法与filter的最大区别为,get只能返回一个数据,filter可以返回多个,在get查找到两个以上数据时就会报错。

obj4 = UserInfo.objects.get(id=5)
city = UserAddress.objects.get(detail='北京望京')

以上这篇对Django项目中的ORM映射与模糊查询的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python字符串连接方式汇总
Aug 21 Python
Python生成验证码实例
Aug 21 Python
python 采集中文乱码问题的完美解决方法
Sep 27 Python
Python中存取文件的4种不同操作
Jul 02 Python
Python实用工具FuckIt.py介绍
Jul 02 Python
给你一面国旗 教你用python画中国国旗
Sep 24 Python
python读取tif图片时保留其16bit的编码格式实例
Jan 13 Python
Python中私有属性的定义方式
Mar 05 Python
解决django migrate报错ORA-02000: missing ALWAYS keyword
Jul 02 Python
使用tensorflow 实现反向传播求导
May 26 Python
Pandas 数据编码的十种方法
Apr 20 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
Apr 28 Python
Django基础知识 web框架的本质详解
Jul 18 #Python
django 使用全局搜索功能的实例详解
Jul 18 #Python
Django中Middleware中的函数详解
Jul 18 #Python
对DJango视图(views)和模版(templates)的使用详解
Jul 17 #Python
react+django清除浏览器缓存的几种方法小结
Jul 17 #Python
在Pycharm中调试Django项目程序的操作方法
Jul 17 #Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 #Python
You might like
php不使用插件导出excel的简单方法
2014/03/04 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
laravel学习教程之关联模型
2016/07/30 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
基于jquery实现等比缩放图片
2014/12/03 Javascript
jQuery中map()方法用法实例
2015/01/06 Javascript
js实现上一页下一页的效果【附代码】
2016/03/10 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
2016/05/28 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
vue中 this.$set的用法详解
2019/09/06 Javascript
基于Vue el-autocomplete 实现类似百度搜索框功能
2019/10/25 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
JS访问对象两种方式区别解析
2020/08/29 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
javascript实现下拉菜单效果
2021/02/09 Javascript
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
用Pygal绘制直方图代码示例
2017/12/07 Python
python代码实现逻辑回归logistic原理
2019/08/07 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
Python Pandas对缺失值的处理方法
2019/09/27 Python
python实现12306登录并保存cookie的方法示例
2019/12/17 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
英国网上超市:Ocado
2020/03/05 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
给水排水工程专业毕业生推荐信
2013/10/28 职场文书
优秀研究生自我鉴定
2013/12/04 职场文书
简历的自荐信
2013/12/19 职场文书
二年级数学教学反思
2014/01/21 职场文书
新闻发布会主持词
2014/03/28 职场文书
父母寄语大全
2014/04/12 职场文书
国庆节演讲稿
2014/05/27 职场文书
个人创业事迹材料
2014/12/30 职场文书
高中地理教学反思
2016/02/19 职场文书