[Django]Django的orm中get和filter的不同

Django的orm中get和filter的不同

Django的orm框架对于业务复杂度不是很高的应用来说还是不错的,写起来很方面,用起来也简单。对于新手来说查询操作中最长用的两个方法get和filter有时候一不注意就会犯下一些小错误。那么今天就来小节下这两个方法使用上的不同。

我常用的是1.5版本的django,就以此为例来说说吧。

文档

首先对比下两个函数文档上的解释。

get

Returns the object matching the given lookup parameters, which should be in the format described in Field lookups.

get() raises MultipleObjectsReturned if more than one object was found. The MultipleObjectsReturned exception is an attribute of the model class.

get() raises a DoesNotExist exception if an object wasn’t found for the given parameters. This exception is also an attribute of the model class

filter

Returns a new QuerySet containing objects that do not match the given lookup parameters.

The lookup parameters (**kwargs) should be in the format described in Field lookups below. Multiple parameters are joined via AND in the underlying SQL statement, and the whole thing is enclosed in a NOT().

  • 输入参数

    get 的参数只能是model中定义的那些字段,只支持严格匹配

    filter 的参数可以是字段,也可以是扩展的where查询关键字,如in,like等

  • 返回值

    get 返回值是一个定义的model对象

    filter 返回值是一个新的QuerySet对象,然后可以对QuerySet在进行查询返回新的QuerySet对象,支持链式操作

    QuerySet一个集合对象,可使用迭代或者遍历,切片等,但是不等于list类型(使用一定要注意)

  • 异常

    get 只有一条记录返回的时候才正常,也就说明get的查询字段必须是主键或者唯一约束的字段。当返回多条记录或者是没有找到记录的时候都会抛出异常

    filter 有没有匹配的记录都可以

本文出自 “orangleliu笔记本” 博客,请务必保留此出处http://blog.csdn.net/orangleliu/article/details/38597593

[Django]Django的orm中get和filter的不同,布布扣,bubuko.com

时间: 2024-11-10 07:16:01

[Django]Django的orm中get和filter的不同的相关文章

django orm中 get 与filter的区别

django orm中 get 与filter的区别: 以前误以为get与filter的区别仅仅是filter返回多条,而get仅支持一条记录,直到使用related_name属性 才发现,两者的差异远不止如此,最本质的区别是 filter返回的值是一个queryset对象, 而get 返回值是一个定义的model对象, 使用get 返回的结果去访问子表对象可以成功,而使用filter就会出错, 是因为queryset 对象没有realtaed_name属性,无法回溯到子表

Django的orm中get和filter的不同

Django的orm框架对于业务复杂度不是很高的应用来说还是不错的,写起来很方面,用起来也简单.对于新手来说查询操作中最长用的两个方法get和filter有时候一不注意就会犯下一些小错误.那么今天就来小节下这两个方法使用上的不同. 首先对比下两个函数文档上的解释. get Returns the object matching the given lookup parameters, which should be in the format described in Field lookups

Django基础六之ORM中的锁和事务

一 锁 行级锁 select_for_update(nowait=False, skip_locked=False) #注意必须用在事务里面,至于如何开启事务,我们看下面的事务一节. 返回一个锁住行直到事务结束的查询集,如果数据库支持,它将生成一个 SELECT ... FOR UPDATE 语句. 举个例子: entries = Entry.objects.select_for_update().filter(author=request.user) #加互斥锁,由于mysql在查询时自动加的

[Django]orm中的外键级联删除

这里的系统环境为django1.6   os为win7 今天有个需求说的是添加一个地区表,然后用外键和几个非常重要的实体表来做关联(地区表作为其他表的外键),写完地区的删除操作的时候,测试了下代码,功能正常.可是眼睛移动到控制台输出的时候傻了 connexesql ->DELETE FROM `mngm_device` WHERE `mngm_device`.`area_id` IN (%s, %s, %s) connexesql ->DELETE FROM `ad_ad` WHERE `ad

django ORM中models的字段以及参数

字段: AutoField(Field)         - int自增列,必须填入参数 primary_key=True     BigAutoField(AutoField)         - bigint自增列,必须填入参数 primary_key=True         注:当model中如果没有自增列,则自动会创建一个列名为id的列         from django.db import models         class UserInfo(models.Model):

Django ORM中常用字段和参数

Django ORM 常用字段和参数 常用字段 AutoField int自增列,必须填入参数primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范围在 -2147483648 to 2147483647.(一般不用它来存手机号(位数也不够),直接用字符串存,) CharField 字符类型,必须提供max_length参数, max_length表示字符长度. 这里需要知道的是Django中的CharFiel

Python/Django(CBA/FBA/ORM操作)

Python/Django(CBA/FBA/ORM操作) CBA:url对应的类(模式) 1 ##====================================CBA操作============================ 2 3 # class geting(View): 4 # def dispatch(self, request, *args, **kwargs): 5 # print('before') 6 # obj = super(geting,self).dispat

django知识之ORM查询

1. ORM字段 1. AutoField(primary_key=True)      -------->自增且主键 2. CharField(max_length=16)         --------->varchar类型(char类型可以自定义 类改写db_type) 3. IntegerField(null=True) --> 最大10位    -------->int类型(最大10位所以手机号码一般用char或者varchar类型) 4. DateField(auto

简单的django登录优化&ORM

上一篇写了一个静态的登录验证. 实景情况网页的登录验证都是动态验证的,过程其实是从后端拿到储存的账户与密码来和前端的输入信息进行匹配校验的. 一.把项目拆分,来一个单独登录的包,放在Django项目下 输入 ==> python manage.py startapp app01 此时重新打开下项目 多出来一个app01的文件夹 二.此时刚创建的app01Django并不知道,需要手动修改配置文件来告诉Django 三.登录过程从主项目切换到app01包中的过程 四.了解一下行的调用数据库的方法