.one()和.first()之间有什么区别

时间:2015-03-20 07:45:40

标签: python sqlalchemy flask-sqlalchemy

SQLAlchemy中的onefirst方法有什么区别

1 个答案:

答案 0 :(得分:41)

Query.one()要求结果集中只有一个结果;如果数据库返回0或2或更多结果并且将引发异常,则会出错。

Query.first()会返回可能较大的结果集中的第一个,如果没有结果,则返回None。不会有任何例外。

来自Query.one()的文档:

  

只返回一个结果或引发异常。

Query.first()

  

如果结果不包含任何行,则返回此查询的第一个结果或无

(强调我的)。

就Python列表而言,one()将是:

def one(lst):
    if not lst:
        raise NoResultFound
    if len(lst) > 1:
        raise MultipleResultsFound
    return lst[0]

first()将是:

def first(lst):
    return lst[0] if lst else None

还有一个Query.one_or_none()方法,只有在查询有多个结果时才会引发异常。否则,它将返回单个结果,如果没有结果则返回None

在列表方面,这相当于:

def one_or_none(lst):
    if not lst:
        return None
    if len(lst) > 1:
        raise MultipleResultsFound
    return lst[0]