对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 08 Python
Python装饰器的函数式编程详解
Feb 27 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
Flask 让jsonify返回的json串支持中文显示的方法
Mar 26 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
Apr 27 Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
Jul 11 Python
详解django.contirb.auth-认证
Jul 16 Python
对Python3 解析html的几种操作方式小结
Feb 16 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
Jul 03 Python
python 6行代码制作月历生成器
Sep 18 Python
Django路由层URLconf作用及原理解析
Sep 24 Python
Python 打印自己设计的字体的实例讲解
Jan 04 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页面缓存方法小结
2015/01/10 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
mysql alter table命令修改表结构实例详解
2016/09/24 PHP
解密效果
2006/06/23 Javascript
慎用 somefunction.prototype 分析
2009/06/02 Javascript
Jsonp 跨域的原理以及Jquery的解决方案
2011/06/27 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
jQuery+CSS3折叠卡片式下拉列表框实现效果
2015/11/02 Javascript
JavaScript与jQuery实现的闪烁输入效果
2016/02/18 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
2016/05/27 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
简单实现jQuery手风琴效果
2017/08/18 jQuery
微信小程序自定义prompt组件步骤详解
2018/06/12 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
详解javascript 变量提升(Hoisting)
2019/03/12 Javascript
vue使用Proxy实现双向绑定的方法示例
2019/03/20 Javascript
抖音上用记事本编写爱心小程序教程
2019/04/17 Javascript
vue+element导航栏高亮显示的解决方式
2019/11/12 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
基于使用paramiko执行远程linux主机命令(详解)
2017/10/16 Python
python http接口自动化脚本详解
2018/01/02 Python
基于Tensorflow高阶读写教程
2020/02/10 Python
使用Pycharm(Python工具)新建项目及创建Python文件的教程
2020/04/26 Python
python使用bs4爬取boss直聘静态页面
2020/10/10 Python
python中time.ctime()实例用法
2021/02/03 Python
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
PHP面试题集
2016/12/18 面试题
刊首寄语大全
2014/04/11 职场文书
公司年会策划方案
2014/05/17 职场文书
大专毕业生求职信
2014/07/05 职场文书
机关作风建设工作总结
2014/10/23 职场文书
青年文明号汇报材料
2014/12/23 职场文书
雨雪天气温馨提示
2015/07/15 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers