浅谈django model的get和filter方法的区别(必看篇)


Posted in Python onMay 23, 2017

django的get和filter方法是django model常用到的,搞清楚两者的区别非常重要。

为了说明它们两者的区别定义2个models

class Student(models.Model):
name = models.CharField('姓名', max_length=20, default='')
age = models.CharField('年龄', max_length=20, default='')


class Book(models.Model):
student = models.ForeignKey(Student)

一、先说下django的get方法:

1、django的get方法是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错。

比如我数据库里有一条记录,记录的name的值是三水点靠木Python的话,我用student = Student.objects.get(name='三水点靠木python'),

返回的是一个记录对象,你可以通过student . _ _ dict _ _来查看,它返回的是一个字典的形式,{'key':valeus},key是字段的名称,而values是值的内容。

而如果我用get方法来查询一个数据库里不存在的记录,程序会报错。

比如:student = Student.objects.get(name='三水点靠木'),你自己可以运行看下。

2、如果你用django的get去取得关联表的数据的话,而关键表的数据如果多于2条的话也会报错。

比如我的student表里有一个记录:

d name age
1 python 24

book表:

id student_id
1 1
2 1

我用

student = Student.objects.get(name='python')
book = Book.objects.get(student)

它也会报错,因为book表有2条记录和student表相匹配。

二、再说下django filter:

1、django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。

比如我数据库里有一条记录,记录的name的值是三水点靠木python的话,我用

student = Student.objects.filter(name='三水点靠木python')

它返回的student是一个对象的列表,可以看的出来student[0]和上面的get方式返回的student的结果是一样的。

2、如果你用django的get去取得关联表的数据的话,无论关联表有多少记录的都不会报错。

django 除了model比较强大的话,表单和模板也很强大.

另外我从别的资料里看到filter好像有缓存数据的功能,第一次查询数据库并生成缓存,下次再调用filter方法的话,直接取得缓存的数据,会get方法每次执行都是直接查询数据库的,不知道这个是不是正确。

这是我用了一段时间django的一点心得体会,希望对大家了解django get和filter有帮助!

以上这篇浅谈django model的get和filter方法的区别(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python随机生成均匀分布在三角形内或者任意多边形内的点
Dec 14 Python
Python用 KNN 进行验证码识别的实现方法
Feb 06 Python
python 处理string到hex脚本的方法
Oct 26 Python
Python3利用Dlib实现摄像头实时人脸检测和平铺显示示例
Feb 21 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 Python
Python实现最大子序和的方法示例
Jul 05 Python
python爬虫 urllib模块url编码处理详解
Aug 20 Python
将python文件打包exe独立运行程序方法详解
Feb 12 Python
Python文件夹批处理操作代码实例
Jul 21 Python
python 怎样进行内存管理
Nov 10 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
Nov 11 Python
BeautifulSoup获取指定class样式的div的实现
Dec 07 Python
Python常用内置模块之xml模块(详解)
May 23 #Python
Python使用PyCrypto实现AES加密功能示例
May 22 #Python
django+js+ajax实现刷新页面的方法
May 22 #Python
Python正则表达式经典入门教程
May 22 #Python
Python AES加密模块用法分析
May 22 #Python
Python 安装setuptools和pip工具操作方法(必看)
May 22 #Python
对Python进行数据分析_关于Package的安装问题
May 22 #Python
You might like
谈谈PHP语法(3)
2006/10/09 PHP
PHP 读取文件的正确方法
2009/04/29 PHP
页面乱码问题的根源及其分析
2013/08/09 PHP
PHP FATAL ERROR: CALL TO UNDEFINED FUNCTION BCMUL()解决办法
2014/05/04 PHP
PHP中利用sleep函数实现定时执行功能实现代码
2016/08/25 PHP
PHP异常类及异常处理操作实例详解
2018/12/19 PHP
用Javascript做flash做的事..才完成的一个类.Auntion Action var 0.1
2007/02/23 Javascript
javascript-简单的计算器实现步骤分解(附图)
2013/05/30 Javascript
动态加载script文件的两种方法
2013/08/15 Javascript
JavaScript设计模式初探
2016/01/07 Javascript
前端js实现文件的断点续传 后端PHP文件接收
2016/10/14 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
Easy UI动态树点击文字实现展开关闭功能
2017/09/30 Javascript
vue中子组件调用兄弟组件方法
2018/07/06 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
vue elementUI 表单校验功能之数组多层嵌套
2019/06/04 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
layer.prompt使文本框为空的情况下也能点击确定的方法
2019/09/24 Javascript
vue实现百度搜索功能
2020/12/28 Javascript
JS通用方法触发点击事件代码实例
2020/02/17 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
[01:02:55]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
推荐下python/ironpython:从入门到精通
2007/10/02 Python
python聊天程序实例代码分享
2013/11/18 Python
python3实现弹弹球小游戏
2019/11/25 Python
python随机模块random使用方法详解
2020/02/14 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
俄罗斯化妆品和香水网上商店:Iledebeaute
2019/01/03 全球购物
自荐信范文
2013/12/10 职场文书
教室布置标语
2014/06/26 职场文书
敬老院标语
2014/06/27 职场文书
毕业证丢失证明范本
2014/09/20 职场文书
JS继承最简单的理解方式
2021/03/31 Javascript
python urllib库的使用详解
2021/04/13 Python