在DB中找不到对象时,SQLAlchemy模型应该引发什么类型的异常?

时间:2016-11-27 09:29:33

标签: python exception sqlalchemy flask-sqlalchemy

我有一个使用SQLAlchemy和Flask框架的网络应用程序。

下面是我的SQLAlchemy模型(简化):

class MyModelA(db.Model):
    a_id = db.Column(UUIDType(binary=False), nullable=False, primary_key=True)

    @classmethod
    def get_model_a(cls, a_id):
        try:
            found_a = cls.query.get(a_id)
        except StatementError:  # when a_id is not a 16-character string
            raise SomeException
        else:
            if found_a is None:
                raise SomeException

这是实现HTTP端点的Flask方法,该端点允许用户使用aID查询数据库:

@app.route('/does_a_exist', methods=['post'])
def does_a_exist():
    try:
        variable_id = request.get_json().get('a_id')
        s = len(variable_id) # None object haven't any length
        MyModelA.get_model_a(variable_id)
    except SomeException:
        return jsonify(goodbye='world'), httplib.HTTP_404_NOT_FOUND
    else:
        return jsonify(hello='world'), httplib.HTTP_200_OK

get_model_a()无法找到具有给定a_id的数据库行时,我希望它引发一个异常(SomeException),该异常将被does_a_exist()捕获这将使用404回复用户。

我的问题是:哪个Exception类最适合用来代替SomeException?有人推荐一个吗?我是一个SQLAlchemy新手,但我很了解Django。在Django中,我会提出ObjectDoesNotExist异常。我应该在这里使用什么相应的SQLAlchemy异常?

1 个答案:

答案 0 :(得分:2)

如果您不想为此错误创建自己的异常类,sqlalchemy.orm.exc.NoResultFound应该适合您的目的。

文档将异常描述为:

  

需要数据库结果,但没有找到。

http://docs.sqlalchemy.org/en/latest/orm/exceptions.html#sqlalchemy.orm.exc.NoResultFound