django之get & filter

get:是从数据库取得满足筛选条件的对象,但如果此时数据库有多个满足条件的值,或者没有满足筛选条件的值,都会报错。

   比如:p=User.objects.get(username='answer'),

  此时数据库必须只有一个满足条件的对象,不然会报错。

  返回的对象可以用p.__dict__来查看,它是以字典的形式返回的,{'key':valeus},key是字段的名称,而values是值的内容。

filter:filter方法是从数据库取得所有匹配的结果,返回一个对象列表,如果记录不存在的话,它会返回[]。

 
  比如我数据库里有一条记录(或多条),记录的name的值是answer的话,我用p = User.objects.filter(name='answer')
它返回的student是一个对象的列表,而student[0]和上面的get方式返回的student的结果是一样的。

转载于:https://my.oschina.net/answerHuang/blog/110376

### 回答1: Django中get和filter的区别在于: 1. get()方法只能返回一个对象,如果查询结果有多个对象或者没有对象,会抛出异常。而filter()方法可以返回多个对象,如果查询结果为空,返回一个空的QuerySet对象。 2. get()方法用于查询唯一的对象,通常是根据主键或者唯一字段进行查询。而filter()方法用于查询多个对象,可以根据多个条件进行过滤。 3. get()方法返回的是一个对象,可以直接访问该对象的属性和方法。而filter()方法返回的是一个QuerySet对象,需要通过迭代器或者索引访问其中的对象。 4. get()方法在查询结果为空或者多于一个对象时会抛出异常,需要进行异常处理。而filter()方法不会抛出异常,可以直接对返回的QuerySet对象进行操作。 综上所述,get()方法适用于查询唯一的对象,而filter()方法适用于查询多个对象并进行过滤。 ### 回答2: Django是一种流行的Python Web框架,常用的查询方法包括get和filter。这两种方法的作用都是从数据库中检索记录,但也存在一些明显的区别。 get方法是以模型为基础进行查询,它允许使用精确的条件匹配来获得单个对象。如果在数据库中找不到匹配项,它将抛出DoesNotExist异常。如果使用get方法时没有指定匹配条件、或者指定的条件无法匹配到任何记录,都会触发该异常。例如: ``` from myapp.models import Person person = Person.objects.get(name='John') ``` 该代码将根据条件“name='John'”从Person模型中检索一个对象,如果找到匹配项,则将其返回;如果没有找到,则抛出DoesNotExist异常。这意味着无需进行if语句检查就可以确定结果的数量。 与之相反,filter方法可以返回多个对象,它是基于queryset进行查询。可以基于不同的条件来过滤数据库中的记录,并返回一个QuerySet对象,该对象包含满足条件的所有记录。如果没有找到匹配项,QuerySet将为空,而不会触发异常。例如: ``` from myapp.models import Person people = Person.objects.filter(age=25) ``` 这段代码将返回Person模型中所有年龄为25岁的对象,可能有多个记录符合条件。返回的是一个QuerySet对象,支持使用迭代器迭代和切片等方法。 此外,get方法只能接受一个限制条件,而filter方法允许多次调用,因此可以将多个条件组合使用。还可以使用Q对象引用多个条件表达式。例如: ``` from myapp.models import Person people = Person.objects.filter(age=25, name__startswith='J').exclude(city='New York') ``` 这段代码将返回名字以字母J开头、年龄为25岁,且不居住在纽约的Person对象。可以在filter方法中使用“__”引用字段,以打造复杂的查询表达式。 总之,get和filter方法在Django中的用途是相似的,但使用方式和返回结果存在明显差异。了解这些差异可以帮助我们更好地利用Django框架,实现灵活、高效的数据库查询操作。 ### 回答3: Django 是一个流行的 web 应用程序框架,使用 Python 语言编写。在 Django 这个框架中,get 和 filter 是使用频率最高的查询方法,这两种方法各有特点,在不同的情况下使用有所区别。 首先,get 方法用于返回模型中符合特定条件的对象。它要求完全匹配条件,并且只返回一个对象。如果没有符合条件的对象,将会引发 DoesNotExist 异常;如果有多个符合条件的对象,将会引发 MultipleObjectsReturned 异常。使用 get 方法时,应该确保只有一个符合条件的对象,否则会引发异常。 filter 方法则用于返回多个符合条件的对象,返回值是 QuerySet 对象,即查询集。这种方法的设计理念是,一般情况下我们需要匹配多个对象而不单单是一个,因此可以直接返回一个 QuerySet 对象,方便使用者进行二次操作。在使用 filter 方法时,可以使用多个条件进行查询,查询条件之间使用逗号分隔,多个条件之间是 AND 的关系。也可以使用 Q 对象进行 OR 查询,使用方法是在多个条件之间使用 Q 对象进行链接。 虽然 get 方法和 filter 方法都是查找操作,但是它们的区别很大,需要根据情况来决定使用哪种方法。如果需要查找一个对象,直接使用 get 方法,可以保证只有一个被返回,容易进行二次操作。如果需要查询多个对象,或者需要进行二次操作,使用 filter 方法可以更加高效地完成任务。需要注意的是,在使用 filter 方法时,返回的是 QuerySet 对象而非对象本身,虽然可以在 QuerySet 上对结果对象进行二次操作,但是需要注意查询效率和数据量问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值