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

What is the difference between .one() and .first()

SQLAlchemy 中的onefirst 方法有什么区别

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

Query.first() return 是第一个可能更大的结果集(将 LIMIT 1 添加到查询),或者 None 如果没有结果。不会引发异常。

来自 Query.one() 的文档:

Return exactly one result or raise an exception.

来自Query.first()

Return the first result of this Query or None if the result doesn’t contain any row.

(强调我的)。

根据 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()方法,只有当查询有多个结果时才会抛出异常。否则它将 return 单个结果,或者 None 如果没有结果。

用列表术语来说,这相当于:

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