python - query - compruebe si.one() está vacío sqlAlchemy
sqlalchemy multiple rows were found for one() (3)
Estoy ejecutando una consulta basada en otros identificadores para la consulta. El problema que tengo es que a veces la consulta no encuentra un resultado. En lugar de que el programa se cuelgue por completo, ¿cómo puedo verificar si el resultado será Ninguno?
Esta es la consulta que tengo:
sub_report_id = DBSession.query(TSubReport.ixSubReport).filter(and_(TSubReport.ixSection==sectionID[0], TSubReport.ixReport== reportID[0])).one()
Cuando el código se ejecuta y no se encuentran resultados, obtengo una excepción NoResultFound
NoResultFound: No row was found for one()
¿hay una manera de simplemente omitir la consulta si no va a haber un resultado?
Encontré la solución en SO (no la encontré antes) Obteniendo la primera fila de sqlalchemy
¿Cómo sabría SQLAlchemy que no iba a haber un resultado sin hacer la consulta?
Deberías atrapar la excepción y manejarla entonces:
from sqlalchemy.orm.exc import NoResultFound
try:
sub_report_id = DBSession.query(TSubReport.ixSubReport).filter(and_(TSubReport.ixSection==sectionID[0], TSubReport.ixReport== reportID[0])).one()
except NoResultFound:
sub_report_id = [] # or however you need to handle it
También puede usar one_or_none()
, esto devuelve None
cuando no se encuentra ningún resultado y es sintácticamente más claro que el first()
. No se requiere manejo de errores.
ref: one_or_none()
Use la first()
función first()
lugar de one()
. Se devolverá Ninguno si no hay resultados.
sub_report_id = DBSession.query(TSubReport.ixSubReport).filter(and_(TSubReport.ixSection==sectionID[0], TSubReport.ixReport== reportID[0])).first()
ver documentación here