web-dev-qa-db-ja.com

.one()と.first()の違いは何ですか

SQLAlchemyのoneメソッドとfirstメソッドの違いは何ですか

26
Reena Shirale

Query.one()では、結果セットにoneの結果のみが必要です。データベースが0または2つ以上の結果を返すとエラーになり、例外が発生します。

Query.first()は、潜在的に大きい結果セット(クエリに_LIMIT 1_を追加)の最初を返します。結果がなかった場合はNoneを返します。例外は発生しません。

Query.one() のドキュメントから:

正確に1つの結果を返すか、例外を発生させます

および Query.first() から:

このクエリの最初の結果を返すか、結果に行が含まれていない場合はNoneを返します。

(強調鉱山)。

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]
_
46
Martijn Pieters