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.


Reply via email to