对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中optparse模块使用浅析
Jan 01 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
关于Python数据结构中字典的心得
Dec 04 Python
Python实现比较扑克牌大小程序代码示例
Dec 06 Python
Python使用dict.fromkeys()快速生成一个字典示例
Apr 24 Python
Python 面向对象之封装、继承、多态操作实例分析
Nov 21 Python
OpenCV中VideoCapture类的使用详解
Feb 14 Python
python基于socket函数实现端口扫描
May 28 Python
详解python metaclass(元类)
Aug 13 Python
PyCharm 解决找不到新打开项目的窗口问题
Jan 15 Python
用Python实现一个打字速度测试工具来测试你的手速
May 28 Python
Django框架中模型的用法
Jun 10 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
Bo-Blog专用的给Windows服务器的IIS Rewrite程序
2007/08/26 PHP
一贴学会PHP 新手入门教程
2009/08/03 PHP
深入分析使用mysql_fetch_object()以对象的形式返回查询结果
2013/06/05 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
PHP中strlen()和mb_strlen()的区别浅析
2014/06/19 PHP
PHP单链表的实现代码
2016/07/05 PHP
laravel手动创建数组分页的实现代码
2018/06/07 PHP
javascript 触发HTML元素绑定的函数
2010/09/11 Javascript
移动节点的jquery代码
2014/01/13 Javascript
javascript替换已有元素replaceChild()使用介绍
2014/04/03 Javascript
JQuery打造省市下拉框联动效果
2014/05/18 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
2015/08/31 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
JavaScript 中 avalon绑定属性总结
2016/10/19 Javascript
vue.js异步上传文件前后端实现代码
2017/08/22 Javascript
微信小程序实现表单校验功能
2020/03/30 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
关于layui flow loading占位图的实现方法
2019/09/21 Javascript
JS window对象简单操作完整示例
2020/01/14 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
[04:03]DOTA2肉山黑名单梦之声 风暴之灵中文配音鉴赏
2013/07/03 DOTA
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
利用python打印出菱形、三角形以及矩形的方法实例
2017/08/08 Python
python3设计模式之简单工厂模式
2017/10/17 Python
Python Flask-web表单使用详解
2017/11/18 Python
Python基于高斯消元法计算线性方程组示例
2018/01/17 Python
Python 远程开关机的方法
2020/11/18 Python
JPA的特点
2014/10/25 面试题
可口可乐广告词
2014/03/20 职场文书
2014年药房工作总结
2014/11/22 职场文书
党风廉政建设调研报告
2015/01/01 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书
Win11怎么进入安全模式?Windows 11进入安全模式的方法
2021/11/21 数码科技
MySQL时区造成时差问题
2022/04/13 MySQL
jdbc中自带MySQL 连接池实践示例
2022/07/23 MySQL