2017-07-20 46 views
0

私はPostgreSQLデータベースでdjangoを使ってアプリケーションを開発しています。このアプリケーションは組織内で使用するように設計されているため、ユーザーが提供するSQL要求を実行する必要があります。私は不正なSQLとビューへの要求を行うときpsycopg2.ErrorがPythonの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) 

しかし、私は500の内部で迎えています:不正なSQL要求の可能性に対処するために、データベースの呼び出しがtry/exceptブロック内にラップされていますサーバーエラー。スタックトレースは、500の原因が、psycopg2.ErrorのサブクラスであるProgrammingErrorであることを示しています。ただし、exceptステートメントは正しくキャッチしません。

答えて

1

Djangoは例外を含むすべてのデータベース例外を、django.dbpackageからラップします。エラーをキャッチする

正しい方法は次のとおりです。

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

あなたは、基礎となるデータベースの例外にアクセスする場合:

except django.db.Error as e: 
    dbException = e.__cause__ #Subclass of psycopg2.Error 
関連する問題