浅谈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去除列表中重复元素的方法
Mar 20 Python
Python脚本文件打包成可执行文件的方法
Jun 02 Python
Zabbix实现微信报警功能
Oct 09 Python
python中异常捕获方法详解
Mar 03 Python
python 中if else 语句的作用及示例代码
Mar 05 Python
pycharm配置当鼠标悬停时快速提示方法参数
Jul 31 Python
python 三元运算符使用解析
Sep 16 Python
解决python3插入mysql时内容带有引号的问题
Mar 02 Python
python学习笔记之多进程
Aug 06 Python
python 实现逻辑回归
Dec 30 Python
Python中使用Selenium环境安装的方法步骤
Feb 22 Python
用PYTHON去计算88键钢琴的琴键频率和音高
Apr 10 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
windows xp下安装pear
2006/12/02 PHP
pdo中使用参数化查询sql
2011/08/11 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
php导出excel格式数据问题
2014/03/11 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
php实现大文件断点续传下载实例代码
2019/10/01 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
2021/03/09 PHP
将光标定位于输入框最右侧实现代码
2012/12/04 Javascript
js中各种类型的变量在if条件中是true还是false
2014/07/16 Javascript
javascritp添加url参数将参数加入到url中
2014/09/25 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
详解node-ccap模块生成captcha验证码
2017/07/01 Javascript
JS实现浏览上传文件的代码
2017/08/23 Javascript
Angularjs按需查询实例代码
2017/10/30 Javascript
express如何使用session与cookie的方法
2018/01/30 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
Python Json序列化与反序列化的示例
2018/01/31 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
利用python脚本如何简化jar操作命令
2019/02/24 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
对Python _取log的几种方式小结
2019/07/25 Python
Python编译为二进制so可执行文件实例
2019/12/23 Python
基于python实现操作redis及消息队列
2020/08/27 Python
CSS实现限制字数功能当对象内文本溢出时显示省略标记
2014/08/20 HTML / CSS
CSS3点击按钮实现背景渐变动画效果
2016/10/19 HTML / CSS
宣传口号大全
2014/06/16 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
法定代表人证明书
2014/11/28 职场文书
2016七一建党节慰问信
2015/11/30 职场文书
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
2021/03/29 Python
Tomcat用户管理的优化配置详解
2022/03/31 Servers
Django中celery的使用项目实例
2022/07/07 Python
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技