check if .one() is empty sqlAlchemy

john picture john · Jul 27, 2014 · Viewed 38.1k times · Source

I am running a query based off of other ids for the query. The problem i have is that sometimes the query won't find a result. Instead of having the entire program crash, how can I check to see if the result will be None?

This is the query I have:

sub_report_id = DBSession.query(TSubReport.ixSubReport).filter(and_(TSubReport.ixSection==sectionID[0], TSubReport.ixReport== reportID[0])).one()

When the code gets executed and no results are found, I get a NoResultFound exception

NoResultFound: No row was found for one()

is there a way to just skip the query if there is not going to be a result?

Found the solution on SO(couldn't find it before) Getting first row from sqlalchemy

Answer

Lynch picture Lynch · Jul 27, 2014

Use first() function instead of one(). It will return None if there is no results.

sub_report_id = DBSession.query(TSubReport.ixSubReport).filter(and_(TSubReport.ixSection==sectionID[0], TSubReport.ixReport== reportID[0])).first()

see documentation here