Rethinkdb python处理空结果

时间:2013-12-04 14:09:42

标签: python database exception-handling rethinkdb

使用rethinkb和python处理空结果的最佳技巧是什么。 我试试这个,但捕捉异常并不令人满意。

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

如果有人尝试过其他技术,我很感兴趣。 谢谢你的帮助。

2 个答案:

答案 0 :(得分:3)

处理此问题的最简单方法可能是使用union添加您想要的元素。

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

一个稍微丑陋的工作,但它应该做的伎俩。我认为我们应该扩展default语法来使用它。我将为此提出一个问题。

答案 1 :(得分:1)

那应该有用

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

您也可以删除第n个(0)并检索光标并执行:

user = None
for i in user:
     user = i
     break # You don't really need to break since there is at most one element