我有以下查询:
profiles = session.query(profile.name).filter(and_(profile.email == email, profile.password == password_hash))
如何检查是否有行,如何只返回第一行(如果有匹配项,则只能返回一行)?
使用 query.one()得到之一,正是一个结果。在所有其他情况下,它将引发你可以处理的异常:
query.one()
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()