Simply handling NoResultFound should work just fine... def zero_or_one(query): try: return query.one() except NoResultFound: return None
On Mon, Jun 17, 2013 at 6:36 PM, Michael Bayer <mike...@zzzcomputing.com> wrote: > > On Jun 17, 2013, at 5:33 AM, Wichert Akkerman <wich...@wiggy.net> wrote: > >> >> On Jun 17, 2013, at 08:58 , Chris Withers <ch...@simplistix.co.uk> wrote: >> >>> Hi All, >>> >>> I seems to commonly need to do a query which should return zero or one >>> mapped objects. >>> >>> .one() isn't what I want as no returned object is ok. >>> >>> .first() isn't what I want as if my query would return more than one >>> object, I have the query wrong and so want an exception. >>> >>> Is there something already available that meets this need? >> >> This will requrie you to run a query which limits the result to max 2 rows >> so you can check if more than one result would be returned. I would just >> create a simple wrapper function: >> >> >> def one_optional(query): >> rows = query.limit(2).all() >> count = len(rows) >> if count == 0: >> return None >> elif count == 1: >> return rows[0] >> else: >> raise RuntimeError('More than one result found.') > > you could even drop the limit(2) so that the query renders more simply if > eagerloads are present. > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at http://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/groups/opt_out. > > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/groups/opt_out.