浅谈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实现rsa算法代码
Feb 17 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 Python
python3获取两个日期之间所有日期,以及比较大小的实例
Apr 08 Python
Django进阶之CSRF的解决
Aug 01 Python
Python从文件中读取数据的方法讲解
Feb 14 Python
python3实现猜数字游戏
Dec 07 Python
python elasticsearch环境搭建详解
Sep 02 Python
python匿名函数lambda原理及实例解析
Feb 07 Python
Python递归函数特点及原理解析
Mar 04 Python
基于打开pycharm有带图片md文件卡死问题的解决
Apr 24 Python
浅析Python OpenCV三种滤镜效果
Apr 11 Python
python blinker 信号库
May 04 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
1 Tube Radio
2021/03/02 无线电
php中时间轴开发(刚刚、5分钟前、昨天10:23等)
2011/10/03 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
完美的php分页类
2017/10/24 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
斜45度寻路实现函数
2009/08/20 Javascript
jQuery 事件队列调整方法
2009/09/18 Javascript
JavaScript传递变量: 值传递?引用传递?
2011/02/22 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
jquery中toggle函数交替使用问题
2015/06/22 Javascript
Bootstrap源码解读导航(6)
2016/12/23 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
详解微信小程序工程化探索之webpack实战
2020/04/20 Javascript
JavaScript ES6 Class类实现原理详解
2020/05/08 Javascript
微信小程序实现点击导航标签滚动定位到对应位置
2020/11/19 Javascript
用Python编程实现语音控制电脑
2014/04/01 Python
python实现kNN算法
2017/12/20 Python
python2.7到3.x迁移指南
2018/02/01 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
python实现的登录与提交表单数据功能示例
2019/09/25 Python
浅析python中while循环和for循环
2019/11/19 Python
python进程池实现的多进程文件夹copy器完整示例
2019/11/27 Python
Pandas-Cookbook 时间戳处理方式
2019/12/07 Python
python 实现PIL模块在图片画线写字
2020/05/16 Python
Java爬虫技术框架之Heritrix框架详解
2020/07/22 Python
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
喜诗官方在线巧克力店:See’s Candies
2017/01/01 全球购物
Schutz鞋官方网站:Schutz Shoes
2017/12/13 全球购物
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
长辈证婚人证婚词
2014/01/09 职场文书
2014老师三严三实对照检查材料思想汇报
2014/09/18 职场文书
村主任“四风”问题个人对照检查材料思想汇报
2014/10/02 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书