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

Ree*_*ale 27 python sqlalchemy flask-sqlalchemy

SQLAlchemy onefirst方法之间有什么区别

Mar*_*ers 47

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

Query.first()返回可能更大的结果集中的第一个,或者LIMIT 1如果没有结果.不会有例外.

从以下文档None:

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

来自Query.one():

如果结果不包含任何行,则返回此Query的第一个结果或None.

(强调我的).

就Python列表而言,Query.first()将是:

def one(lst):
    if not lst:
        raise NoResultFound
    if len(lst) > 1:
        raise MultipleResultsFound
    return lst[0]
Run Code Online (Sandbox Code Playgroud)

one()将是:

def first(lst):
    return lst[0] if lst else None
Run Code Online (Sandbox Code Playgroud)

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

在列表中,这相当于:

def one_or_none(lst):
    if not lst:
        return None
    if len(lst) > 1:
        raise MultipleResultsFound
    return lst[0]
Run Code Online (Sandbox Code Playgroud)