对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 30 Python
Python验证码识别的方法
Jul 10 Python
python3 实现的人人影视网站自动签到
Jun 19 Python
浅谈python中字典append 到list 后值的改变问题
May 04 Python
python 实现倒排索引的方法
Dec 25 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
Jan 15 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
Feb 17 Python
解决TensorFlow调用Keras库函数存在的问题
Jul 06 Python
Django怎么在admin后台注册数据库表
Nov 14 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
Dec 07 Python
python spilt()分隔字符串的实现示例
May 21 Python
Python 处理表格进行成绩排序的操作代码
Jul 26 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同时支持GIF、png、JPEG
2006/10/09 PHP
PHP自定义错误用法示例
2016/09/28 PHP
javascript 弹出层组件(升级版)
2011/05/12 Javascript
JQuery插件开发示例代码
2013/11/06 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
浅析jquery某一元素重复绑定的问题
2014/01/03 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
JavaScript中实现继承的三种方式和实例
2015/01/29 Javascript
详解参数传递四种形式
2015/07/21 Javascript
JavaScript验证Email(3种方法)
2015/09/21 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
JavaScript之promise_动力节点Java学院整理
2017/07/03 Javascript
JavaScript中的"=、==、==="区别讲解
2019/01/22 Javascript
vue 自定义右键样式的实例代码
2019/11/06 Javascript
如何手写一个简易的 Vuex
2020/10/10 Javascript
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
python合并已经存在的sheet数据到新sheet的方法
2018/12/11 Python
python实现智能语音天气预报
2019/12/02 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
浅谈css3中的前缀
2016/07/20 HTML / CSS
工商学院毕业生个人自我评价
2013/09/19 职场文书
营销与策划应届生求职信
2013/11/04 职场文书
实习教师自我鉴定
2013/12/09 职场文书
教师评优事迹材料
2014/01/10 职场文书
《猴子种树》教学反思
2014/02/14 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
新学期教师寄语
2014/04/02 职场文书
五好关工委申报材料
2014/05/31 职场文书
服装区域经理岗位职责
2015/04/10 职场文书
新闻发布会新闻稿
2015/07/17 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技