django 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方法:
1django的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表里有一个记录:
id 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:
1django的filter方法是从数据库的取得匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。
比如我数据库里有一条记录,记录的name的值是老王python的话,我用student = Student.objects.filter(name='老王python')
它返回的student是一个对象的列表,可以看的出来student[0]和上面的get方式返回的student的结果是一样的。
2如果你用django的get去取得关联表的数据的话,无论关联表有多少记录的都不会报错。
另外我从别的资料里看到filter好像有缓存数据的功能,第一次查询数据库并生成缓存,下次再调用filter方法的话,直接取得缓存的数据,会get方法每次执行都是直接查询数据库的,不知道这个是不是正确。
这是我用了一段时间django的一点心得体会,希望对大家了解django get和filter有帮助!
作者:老王@python python 教程
老王python,提供pythn相关的python教程和python 下载,希望大家能够喜欢
转载于:https://www.cnblogs.com/wanpython/archive/2010/06/29/1767923.html
django get和filter方法的几点不同相关推荐
- python 多关键字匹配_使用django的objects.filter()方法匹配多个关键字的方法
介绍: 今天在使用django的时候忽然想用到,如何匹配多个关键字的操作,我们知道django有一个objects.filter()方法,我们可以通过如下一句代码实现匹配数据库中title包含key关 ...
- django的get和filter方法的区别
django的get和filter方法是django model常用到的,搞清楚两者的区别非常重要.为了说明它们两者的区别定义2个models: classStudent(models.Model): ...
- 关于Django ORM filter方法小结
django filter是一个过滤器,相当于SQL的select * from where. filter返回一个QuerySet对象,还可以在该对象上继续进行django orm 该有的操作. ...
- python中objects_python之django的objects.get和objects.filter方法
为了说明它们两者的区别定义2个models class Student(models.Model): name = models.CharField('姓名', max_length=20, defa ...
- Python之列表表达式及高阶函数lamda、zip、enumerate、map和filter方法
一.列表表达式[List Comprehension] 顾名思义,这个表达式作用是以一个快捷的方法对列表进行操作或运算,返回新的列表.其使用方式为[表达式 for 变量 in 列表] 或者 [表达式 ...
- python编程django项目中ModuleNotFoundError: No module named ‘django.core.urlresolvers‘解决方法
文章目录 遇到的问题 解决方法 参考 遇到的问题 在做<python编程-从入门到实践>书中的项目的时候,遇到No module named 'django.core.urlresolve ...
- Python的filter方法实现筛选功能
filter方法可以实现筛选,第一个参数是一个函数,返回值是True或者False,第二个参数可以是str.tuple.list,将后面的参数依次传递给函数,依次判断结果,留下结果为 True的.比如 ...
- JS Array filter()方法
JS Array filter()方法 js的数据对象有一个fileter()方法,运行传入一个方法,并对数组中的每个元素进行过滤. var arr = [1,2,3,4,5,6]; function ...
- ES6 必须要用的数组Filter() 方法,不要再自己循环遍历了!!!
1,来一个最简单最常用的栗子: 获得年龄为9岁的孩子 1 let arr = [2 {3 name:'小明',4 sex:0,5 age:96 },7 { 8 name:'小红', 9 sex:1, ...
最新文章
- c语言pID程序怎么设计,51单片机PID的算法实现程序C语言
- android 上传html文件大小,浅谈关于Android WebView上传文件的解决方案
- MySQL编程技巧_MySQL编程中的6个重要的实用技巧
- SQLServer常用SQL语句
- 数据分析sql面试必会6题经典_经典SQL面试题及答案分析
- 2022-02-05大数据学习日志——Hadoop离线阶段——Hive SQL DDL
- python12306抢票_python实现12306抢票
- 关于解决 inittramfs unpacking failed:Decoding failed 报错
- 京东商品关联版式,如何设置手机和电脑都显示?
- android:很抱歉,XXX已停止运行
- 短视频直播平台第三方特效SDK完整接入教程
- qq引流有哪些模式? QQ引流的几种方法
- TiDB 6.0 新特性
- Vue.config.productionTip = false 是什麽意思?
- 远程连接桌面黑屏解决方法(Winlogon错误的解决办法)
- 进销存 SPU和SKU
- 计算机视觉技术与应用概论,8计算机视觉概论2010.pdf
- 1、亲密数,你亲密个锤子哦
- 匝间短路故障学习历程(一)--数据集的问题
- Ubuntu16.04(GTX1660ti)cuda10.0和cudnn7.6环境配置 (环境乃一生之敌!!!)
热门文章
- 康轩职教计算机应用基础课件,《Excel中IF函数的应用-机器人任务》计算机应用基础职教课件.ppt...
- python iterable对象_如何理解Python中的iterable对象
- 修改模板文件后,Build Project(ctrl+F9)可以快速运行
- 【BZOJ3529】数表,莫比乌斯反演+BIT
- 【BZOJ4568】幸运数字,树链剖分/倍增+维护线性基
- 【OJ8756】砝码称重V2,可达性多重背包
- 10.傅里叶变换——达利画家、基集(Basis Set)、傅里叶级数(Fourier Series)_1
- 3.过滤——比较过滤结果、2D中的移动平均线_2
- 2017.10.9 DZY Loves Math VI 失败总结
- Mosquito的优化——其他优化(九)