对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之一个免费的实验室
Sep 14 Python
自己使用总结Python程序代码片段
Jun 02 Python
Django框架下在视图中使用模版的方法
Jul 16 Python
python通过百度地图API获取某地址的经纬度详解
Jan 28 Python
对python3中pathlib库的Path类的使用详解
Oct 14 Python
python查询文件夹下excel的sheet名代码实例
Apr 02 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
Jun 27 Python
python 实现单通道转3通道
Dec 03 Python
opencv python Canny边缘提取实现过程解析
Feb 03 Python
python接口自动化之ConfigParser配置文件的使用详解
Aug 03 Python
Python通过类的组合模拟街道红绿灯
Sep 16 Python
详解用Python把PDF转为Word方法总结
Apr 27 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
通过文字传递创建的图形按钮
2006/10/09 PHP
探讨php中header的用法详解
2013/06/07 PHP
php中如何使对象可以像数组一样进行foreach循环
2013/08/09 PHP
ThinkPHP之getField详解
2014/06/20 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
jQuery on()方法绑定动态元素的点击事件实例代码浅析
2016/06/16 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
使用javascript函数编写简单银行取钱存钱流程
2018/05/26 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
python中类的属性和方法介绍
2018/11/27 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
在pytorch中为Module和Tensor指定GPU的例子
2019/08/19 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
Python tkinter布局与按钮间距设置方式
2020/03/04 Python
pycharm中导入模块错误时提示Try to run this command from the system terminal
2020/03/26 Python
python怎么判断模块安装完成
2020/06/19 Python
学python最电脑配置有要求么
2020/07/05 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
python 实现图片批量压缩的示例
2020/12/18 Python
python自动化办公操作PPT的实现
2021/02/05 Python
CSS3解析抖音LOGO制作的方法步骤
2019/04/11 HTML / CSS
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
世界经理人咨询有限公司面试
2014/09/23 面试题
出纳的岗位职责
2013/11/09 职场文书
舞蹈教师自荐信
2014/01/27 职场文书
高中军训感想800字
2014/02/23 职场文书
公立医院改革实施方案
2014/03/14 职场文书
护士节慰问信
2015/02/15 职场文书
党校个人总结
2015/03/04 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
SONY600GR,国产收音机厂商永远的痛
2022/04/05 无线电