5

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

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

4

2 回答 2

3

处理这个问题的最简单方法可能是通过添加你想要返回的元素union

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

一个稍微难看的解决方法,但它应该可以解决问题。我认为我们可能应该扩展default语法来处理这个问题。我要为此提出一个问题。

于 2013-12-04T17:17:00.640 回答
1

那应该工作

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

您还可以删除 nth(0) 并检索游标并执行以下操作:

user = None
for i in user:
     user = i
     break # You don't really need to break since there is at most one element
于 2013-12-04T16:22:14.623 回答