query practices in_ example delete best auth and python sqlalchemy flask flask-sqlalchemy

python - practices - Obteniendo la primera fila de sqlalchemy



sqlalchemy models (3)

Tengo la siguiente consulta:

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

¿Cómo puedo verificar si hay una fila y cómo devuelvo la primera (debería ser solo una si hay una coincidencia)?


Puede usar la query.first() función query.first() en el objeto Consulta. Esto devolverá el primer resultado, o None si no hay resultados.

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

Alternativamente, puede usar query.one() , que le dará el único elemento, pero elevará excepciones para una consulta con cero o múltiples resultados.

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''


Use query.one() para obtener uno y exactamente un resultado. En todos los demás casos, se generará una excepción que puede manejar:

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

También hay query.first() , que le dará solo el primer resultado de posiblemente muchos, sin levantar esas excepciones. Pero dado que desea tratar el caso de que no haya ningún resultado o más de lo que pensaba, query.one() es exactamente lo que debe usar.


Use one_or_none() . Devuelve como máximo un resultado o genera una excepción.

Devuelve None si la consulta no selecciona filas.