J'exécute une requête basée sur d'autres identifiants pour la requête. Le problème que j'ai est que parfois la requête ne trouvera pas de résultat. Au lieu de faire planter tout le programme, comment puis-je vérifier si le résultat sera Aucun?
Voici la requête que j'ai:
sub_report_id = DBSession.query(TSubReport.ixSubReport).filter(and_(TSubReport.ixSection==sectionID[0], TSubReport.ixReport== reportID[0])).one()
Lorsque le code est exécuté et qu'aucun résultat n'est trouvé, j'obtiens une exception NoResultFound
NoResultFound: No row was found for one()
existe-t-il un moyen de sauter la requête s'il n'y a pas de résultat?
J'ai trouvé la solution sur SO (impossible de la trouver auparavant) Obtenir la première ligne de sqlalchemy
Utilisez la fonction first()
au lieu de one()
. Il renverra None s'il n'y a aucun résultat.
sub_report_id = DBSession.query(TSubReport.ixSubReport).filter(and_(TSubReport.ixSection==sectionID[0], TSubReport.ixReport== reportID[0])).first()
voir la documentation ici
Vous pouvez également utiliser one_or_none()
, cela renvoie None
quand aucun résultat n'est trouvé et est syntaxiquement plus clair que first()
. Aucune gestion des erreurs requise.
réf: one_or_none ()
Comment SQLAlchemy pouvait-il savoir qu'il n'y aurait pas de résultat sans faire la requête?
Vous devez intercepter l'exception et la gérer ensuite:
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