浅谈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中星号变量的几种特殊用法
Sep 07 Python
python用装饰器自动注册Tornado路由详解
Feb 14 Python
解决python3 urllib中urlopen报错的问题
Mar 25 Python
Python实现将doc转化pdf格式文档的方法
Jan 19 Python
Python数据预处理之数据规范化(归一化)示例
Jan 08 Python
Python远程视频监控程序的实例代码
May 05 Python
Python线程障碍对象Barrier原理详解
Dec 02 Python
在python中使用nohup命令说明
Apr 16 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
Jul 14 Python
python中reload重载实例用法
Dec 15 Python
Python创建简单的神经网络实例讲解
Jan 04 Python
Python如何把不同类型数据的json序列化
Apr 30 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
人族 Terran 魔法与科技
2020/03/14 星际争霸
一个目录遍历函数
2006/10/09 PHP
浅谈php错误提示及查错方法
2015/07/14 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
thinkPHP框架动态配置用法实例分析
2018/06/14 PHP
javascript语句中的CDATA标签的意义
2007/05/09 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
学习javascript面向对象 理解javascript原型和原型链
2016/01/04 Javascript
个人网站留言页面(前端jQuery编写、后台php读写MySQL)
2016/05/03 Javascript
js输出数据精确到小数点后n位代码
2016/07/02 Javascript
JS JSOP跨域请求实例详解
2016/07/04 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
Javascript中this绑定的3种方法与比较
2016/10/13 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
js canvas实现星空连线背景特效
2019/11/01 Javascript
python发送邮件的实例代码(支持html、图片、附件)
2013/03/04 Python
Python写的Socks5协议代理服务器
2014/08/06 Python
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
利用numpy和pandas处理csv文件中的时间方法
2018/04/19 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
python中count函数简单用法
2020/01/05 Python
Python dict和defaultdict使用实例解析
2020/03/12 Python
五分钟学会HTML5的WebSocket协议
2019/11/22 HTML / CSS
AmazeUI 手机版页面的顶部导航条Header与侧边导航栏offCanvas的示例代码
2020/08/19 HTML / CSS
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
nohup的用法
2012/11/26 面试题
大专学生推荐信范文
2013/11/19 职场文书
青年教师典范事迹材料
2014/01/31 职场文书
《长征》教学反思
2014/04/27 职场文书
团日活动总结书
2014/05/08 职场文书
预备党员思想汇报1000字
2014/10/07 职场文书
房租涨价通知
2015/04/23 职场文书
教师工作证明范本
2015/06/12 职场文书
gojs实现蚂蚁线动画效果
2022/02/18 Javascript
springboot入门 之profile设置方式
2022/04/04 Java/Android