Getting first row from sqlalchemy

后端 未结 4 1713
半阙折子戏
半阙折子戏 2020-12-13 17:13

I have the following query:

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

相关标签:
4条回答
  • 2020-12-13 17:27

    Assuming you have a model User, you can get the first result with:

    User.query.first()

    If the table is empty, it will return None.

    0 讨论(0)
  • 2020-12-13 17:39

    You can use the first() function on the Query object. This will return the first result, or None if there are no results.

    result = session.query(profile.name).filter(...).first()
    
    if not result:
        print 'No result found'
    

    Alternatively you can use one(), which will give you the only item, but raise exceptions for a query with zero or multiple results.

    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'
    
    0 讨论(0)
  • 2020-12-13 17:40

    Use one_or_none(). Return at most one result or raise an exception.

    Returns None if the query selects no rows.

    0 讨论(0)
  • 2020-12-13 17:41

    Use query.one() to get one, and exactly one result. In all other cases it will raise an exception you can handle:

    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
    

    There's also query.first(), which will give you just the first result of possibly many, without raising those exceptions. But since you want to deal with the case of there being no result or more than you thought, query.one() is exactly what you should use.

    0 讨论(0)
提交回复
热议问题