一尘不染

从sqlalchemy获取第一行

flask

我有以下查询:

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

如何检查是否有行,如何只返回第一行(如果有匹配项,则只能返回一行)?


阅读 636

收藏
2020-04-06

共1个答案

一尘不染

使用 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()因此正是你应该使用的方法。

2020-04-06