zoukankan      html  css  js  c++  java
  • django中的filter和get的区别 (MultipleObjectsReturned: get() returned more than one Publisher --)(DoesNotExist: Publisher matching query does not exist.)

    上面的例子中`` filter()`` 函数返回一个记录集,这个记录集是一个列表。 相对列表来说,有些时候我们更需要获取单个的对象, `` get()`` 方法就是在此时使用的:

    >>> Publisher.objects.get(name="Apress")
    <Publisher: Apress>

    这样,就返回了单个对象,而不是列表(更准确的说,QuerySet)。 所以,如果结果是多个对象,会导致抛出异常:

    >>> Publisher.objects.get(country="U.S.A.")
    Traceback (most recent call last):
        ...
    MultipleObjectsReturned: get() returned more than one Publisher --
        it returned 2! Lookup parameters were {'country': 'U.S.A.'}

    如果查询没有返回结果也会抛出异常:

    >>> Publisher.objects.get(name="Penguin")
    Traceback (most recent call last):
        ...
    DoesNotExist: Publisher matching query does not exist.

    这个 DoesNotExist 异常 是 Publisher 这个 model 类的一个属性,即 Publisher.DoesNotExist。在你的应用中,你可以捕获并处理这个异常,像这样:

    try:
        p = Publisher.objects.get(name='Apress')
    except Publisher.DoesNotExist:
        print "Apress isn't in the database yet."
    else:
        print "Apress is in the database."

    1.django的get方法是从数据库的取得一个匹配的结果,返回一个对象,如果记录不存在的话,它会报错。

    2.如果你用django的get去取得关联表的数据的话,而关键表的数据如果多于2条的话也会报错。

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

    4.如果你用django的get去取得关联表的数据的话,无论关联表有多少记录的都不会报错。

  • 相关阅读:
    配置变量的信息
    Smarty保留变量信息
    选择排序
    java.utils.HashMap数据结构分析
    HashMap的工作原理
    Dubbo
    五种单例模式:
    Redis的持久化机制包括RBD和AOF两种,对于这两种持久化方式各有优势
    Zookeeper要安装在奇数个节点,但是为什么?
    Redis搭建多台哨兵
  • 原文地址:https://www.cnblogs.com/xuchunlin/p/6067141.html
Copyright © 2011-2022 走看看