1. ホーム
  2. python

sqlalchemy から最初の行を取得する

2023-10-14 23:43:09

質問

次のようなクエリがあります。

profiles = session.query(profile.name).filter(and_(profile.email == email, profile.password == password_hash))

行があるかどうかを確認し、最初のもの(一致するものがあれば1つだけのはず)を返すにはどうすればよいでしょうか。

どのように解決するのですか?

使用方法 query.one() を使えば1つ、そして まさに の結果を得ることができます。他のすべてのケースでは、処理可能な例外が発生します。

from sqlalchemy.orm.exc import NoResultFound
from sqlalchemy.orm.exc import MultipleResultsFound

try:
    user = session.query(User).one()
except MultipleResultsFound, e:
    print e
    # Deal with it
except NoResultFound, e:
    print e
    # Deal with that as well

また query.first() もありますが、これは例外を発生させることなく、多くの結果のうちの最初の結果だけを与えます。しかし、結果がない場合や思ったより多い場合に対処したいので query.one() はまさにこれを使うべきでしょう。