对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实现矩阵乘法的方法
Jun 28 Python
Python字符串格式化输出方法分析
Apr 13 Python
python UNIX_TIMESTAMP时间处理方法分析
Apr 18 Python
python如何在终端里面显示一张图片
Aug 17 Python
使用Python生成XML的方法实例
Mar 21 Python
Python 由字符串函数名得到对应的函数(实例讲解)
Aug 10 Python
python如何重载模块实例解析
Jan 25 Python
python计算两个地址之间的距离方法
Jun 09 Python
Python实现线性插值和三次样条插值的示例代码
Nov 13 Python
python map比for循环快在哪
Sep 21 Python
python 如何引入协程和原理分析
Nov 30 Python
Python可变与不可变数据和深拷贝与浅拷贝
Apr 06 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实现的获取网站备案信息查询代码(360)
2013/09/23 PHP
浅谈php优化需要注意的地方
2014/11/27 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
php7安装mongoDB扩展的方法分析
2017/08/02 PHP
JavaScript Prototype对象
2009/01/07 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
nuxt中使用路由守卫的方法步骤
2019/01/27 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
小程序中的箭头函数的具体使用
2020/06/19 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
python实现批量修改文件名代码
2017/09/10 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
Python使用分布式锁的代码演示示例
2018/07/30 Python
Python集合基本概念与相关操作实例分析
2019/10/30 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
英国高街电视:High Street TV
2018/05/22 全球购物
好邻里事迹材料
2014/01/16 职场文书
同学聚会主持词
2014/03/18 职场文书
西安导游词
2015/02/12 职场文书
演讲开场白台词大全
2015/05/29 职场文书
刑事法律意见书
2015/06/04 职场文书
小学作文指导之如何写人?
2019/07/08 职场文书