次のクエリがあります。
profiles = session.query(profile.name).filter(and_(profile.email == email, profile.password == password_hash))
行があるかどうかを確認するにはどうすればよいですか?最初の行を返すにはどうすればよいですか?
query.one()
を使用して1つを取得し、exactly1つの結果を使用します。その他の場合はすべて、処理可能な例外が発生します。
_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()
はまさに使用すべきものです。
Queryオブジェクトで first()
関数を使用できます。これは最初の結果を返します。結果がない場合はNoneを返します。
_result = session.query(profile.name).filter(...).first()
if not result:
print 'No result found'
_
代わりに one()
を使用することもできます。これは唯一のアイテムを提供しますが、ゼロまたは複数の結果を含むクエリに対して例外を発生させます。
_from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
try:
result = session.query(profile.name).filter(...).one()
print result
except NoResultFound:
print 'No result was found'
except MultipleResultsFound:
print 'Multiple results were found'
_
one_or_none() を使用します。最大で1つの結果を返すか、例外を発生させます。
クエリが行を選択しない場合、Noneを返します。
モデルUserがあると仮定すると、最初の結果を得ることができます:
User.query.first()
テーブルが空の場合、Noneを返します。