浅谈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操作MongoDB基础知识
Nov 01 Python
使用Python编写爬虫的基本模块及框架使用指南
Jan 20 Python
python中的计时器timeit的使用方法
Oct 20 Python
pandas数据处理基础之筛选指定行或者指定列的数据
May 03 Python
简单了解python关系(比较)运算符
Jul 08 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
Sep 06 Python
Python发送邮件封装实现过程详解
May 09 Python
Django中的模型类设计及展示示例详解
May 29 Python
python实现逻辑回归的示例
Oct 09 Python
Python-openpyxl表格读取写入的案例详解
Nov 02 Python
python模拟点击在ios中实现的实例讲解
Nov 26 Python
python中的random模块和相关函数详解
Apr 22 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
CI框架装载器Loader.php源码分析
2014/11/04 PHP
Thinkphp5.0自动生成模块及目录的方法详解
2017/04/17 PHP
ThinkPHP5+Layui实现图片上传加预览功能
2018/08/17 PHP
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
jquery的父子兄弟节点查找示例代码
2014/03/03 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
JS中Eval解析JSON字符串的一个小问题
2016/02/21 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
JQuery 设置checkbox值二次无效的解决方法
2016/07/22 Javascript
JS实现复制内容到剪贴板功能
2017/02/05 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
Vue 父子组件、组件间通信
2017/03/08 Javascript
Node.js服务器开启Gzip压缩教程
2017/08/11 Javascript
详解React之父子组件传递和其它一些要点
2018/06/25 Javascript
JS实现图片上传多次上传同一张不生效的处理方法
2018/08/06 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
2019/08/07 Javascript
jQuery实现滑动开关效果
2020/08/02 jQuery
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
9种python web 程序的部署方式小结
2014/06/30 Python
Python导出DBF文件到Excel的方法
2015/07/25 Python
python实现数据库跨服务器迁移
2018/04/12 Python
python实现多层感知器
2019/01/18 Python
Python使用Pandas读写Excel实例解析
2019/11/19 Python
Django 后台带有字典的列表数据与页面js交互实例
2020/04/03 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
Python中常用的os操作汇总
2020/11/05 Python
村委会主任先进事迹
2014/01/15 职场文书
万年牢教学反思
2014/02/15 职场文书
《去年的树》教学反思
2014/04/11 职场文书
物业管理专业自荐信
2014/07/01 职场文书
通知函的格式
2015/04/27 职场文书
小学生暑假生活总结
2015/07/13 职场文书
小学中队长竞选稿
2015/11/20 职场文书
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android
PYTHON InceptionV3模型的复现详解
2022/05/06 Python