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.