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

 更新时间:2017年05月23日 08:46:48   投稿:jingxian  
下面小编就为大家带来一篇浅谈django model的get和filter方法的区别(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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方法的区别(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python3.7安装keras和TensorFlow的教程图解

    Python3.7安装keras和TensorFlow的教程图解

    这篇文章主要介绍了Python3.7安装keras和TensorFlow经验,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • python定时利用QQ邮件发送天气预报的实例

    python定时利用QQ邮件发送天气预报的实例

    下面小编就为大家分享一篇python定时利用QQ邮件发送天气预报的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • Macbook air m1安装python/anaconda全过程(图文)

    Macbook air m1安装python/anaconda全过程(图文)

    这篇文章主要介绍了Macbook air m1安装python/anaconda全过程(图文),文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • Python OpenCV实现简单的颜色识别功能(对红色和蓝色识别并输出)

    Python OpenCV实现简单的颜色识别功能(对红色和蓝色识别并输出)

    Python OpenCV可以用来进行颜色识别,可以通过读取图像的像素值,来判断像素点的颜色,从而实现颜色识别,这篇文章主要给大家介绍了关于Python OpenCV实现简单的颜色识别功能(对红色和蓝色识别并输出)的相关资料,需要的朋友可以参考下
    2023-12-12
  • Python中os模块的12种用法总结

    Python中os模块的12种用法总结

    OS ( Operating System 操作系统 ) 操作系统模块;它是属于python的标准库,常用于处理文件和目录(文件夹)的操作。本文为大家总结了这个模块的12种用法,希望有所帮助
    2022-08-08
  • 使用python实现对元素的长截图功能

    使用python实现对元素的长截图功能

    这篇文章主要介绍了用python实现对元素的长截图功能,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-11-11
  • 使用jupyter Nodebook查看函数或方法的参数以及使用情况

    使用jupyter Nodebook查看函数或方法的参数以及使用情况

    这篇文章主要介绍了使用jupyter Nodebook查看函数或方法的参数以及使用情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python高阶函数、常用内置函数用法实例分析

    Python高阶函数、常用内置函数用法实例分析

    这篇文章主要介绍了Python高阶函数、常用内置函数用法,结合实例形式分析了Python高阶函数与常用内置函数相关功能、原理、使用技巧与操作注意事项,需要的朋友可以参考下
    2019-12-12
  • kali中python版本的切换方法

    kali中python版本的切换方法

    今天小编就为大家分享一篇kali中python版本的切换方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python适配器模式代码实现解析

    Python适配器模式代码实现解析

    这篇文章主要介绍了Python适配器模式代码实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08

最新评论