Question

What is the best technique with rethinkb and python to deal with empty result. I try this, but catching exceptions is not satisfactory.

@staticmethod
def get_by_mail(mail):
    try:
        return User(
            r.table('users').filter({"mail": mail}).limit(1).nth(0).run()
        )
    except RqlRuntimeError:
        return None

If anyone has tried other techniques, I am very interested. Thanks for your help.

Was it helpful?

Solution

The easiest way to deal with this is probably by adding in the element you want back with a union.

r.table('users').filter({"mail": mail}).limit(1).union([{}])[0]

A slightly ugly work around but it should do the trick. I think we should probably extend the default syntax to work with this. I'm going to make an issue for that.

OTHER TIPS

That should work

r.table('users').filter({"mail": mail}).do( lambda users:
    r.branch(
        users.count() == 1,
        users.nth(0),
        None
     )
 )

You can also remove the nth(0) and retrieve a cursor and do:

user = None
for i in user:
     user = i
     break # You don't really need to break since there is at most one element
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top