psycopg2.Error没有在python try / except块

时间:2017-07-20 14:14:51

标签: python django postgresql

我正在使用带有PostgreSQL数据库的django开发一个应用程序。该应用程序旨在用于组织内,因此需要执行用户提供的SQL请求。为了处理格式错误的SQL请求的可能性,数据库调用包含在try / except块中:

import psycopg2
...
def djangoView(request):
    ...
    try:
        result = DBModel.objects.raw(sqlQuery)
        return getJSONResponse(result) #Serializes result of query to JSON
    except psycopg2.Error:
        pass #Handle error (no db requests are made)

但是,当我向格式错误的SQL发出请求时,我遇到了500内部服务器错误。堆栈跟踪显示500的原因是ProgrammingError,它是psycopg2.Error的子类。但是,except语句没有正确捕获它。

1 个答案:

答案 0 :(得分:1)

Django使用django.db package的例外包装所有数据库异常。

捕获错误的正确方法是:

import django.db
...
except django.db.Error:

如果要访问基础数据库异常:

except django.db.Error as e:
    dbException = e.__cause__ #Subclass of psycopg2.Error