django学习之数据查询的get和filter用法

django是一个强大的免费的python框架,最近在学习中发现了一个问题,就是我需要按照一个字段查询信息时候使用get返回异常,如图所示:

查询资料后了解到django的get方法是从数据库中去的一个匹配的结果,如果匹配到多条记录他会报错。就是上面图片红色笔记出来的。

现在把django的数据查询最常用的两个方法get()和filter()的不同整理出来,以供大家参考。

一、django中的get()方法:

django的get()方法是从数据库中查询出一条匹配的记录,返回一个对象,如果没有匹配到的话,就会报出错误。如图所示:

就是某个字段没有匹配到记录。举个例子,假如我们有个学生的类,代码如下:

class Student(models.Model):    
    name = models.CharField('姓名', max_length=15)    
    age = models.IntegerField('年龄')

里面有两条记录为:学生A,10;第二条记录:学生B,10; 我们查询用Student.objects.get(name='学生C'),因为这条记录不存在,就会报上面的错误。

如果get()查询匹配到两条记录,比如我们用Student.objects.get(age=10)来查询,就会报另外一个错误,就是上面的第一张图的错误,"return more then one".

二、django的filter()方法:

django中的filter()方法是从数据库中缺的所有的匹配几句,返回一个对象列表,如果没有匹配到的话,返回[]空列表。还用上面的案例Student.objects.filter(age=10),

返回的是一个包含两条记录的列表。

三、在一对多关系中,如果用get取得关联表中返回的是多个数据。不会报错。

四、filter具有缓存功能,第一次查询后会生成缓存,下次调用的话,直接读取缓存数据,大大调高速度,而get()方法每次执行都是直接查询数据库的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值