我正在使用带有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语句没有正确捕获它。
答案 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