Skip to content

Commit bc36b3c

Browse files
committed
use standard Django errors for database failures
1 parent 597b58b commit bc36b3c

File tree

1 file changed

+21
-3
lines changed

1 file changed

+21
-3
lines changed

django_pyodbc/base.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"""
44
import os
55
import re
6+
import sys
67

78
from django.core.exceptions import ImproperlyConfigured
89

@@ -18,6 +19,7 @@
1819
if pyodbc_ver < (2, 0, 38, 9999):
1920
raise ImproperlyConfigured("pyodbc 2.0.38 or newer is required; you have %s" % Database.version)
2021

22+
from django.db import utils
2123
from django.db.backends import BaseDatabaseWrapper, BaseDatabaseFeatures, BaseDatabaseValidation
2224
from django.db.backends.signals import connection_created
2325
from django.conf import settings
@@ -38,7 +40,7 @@
3840
from django_pyodbc.creation import DatabaseCreation
3941
from django_pyodbc.introspection import DatabaseIntrospection
4042

41-
DatabaseError = Database.DatabaseError
43+
DatabaseError = Database.Error
4244
IntegrityError = Database.IntegrityError
4345

4446
class DatabaseFeatures(BaseDatabaseFeatures):
@@ -318,7 +320,15 @@ def execute(self, sql, params=()):
318320
sql = self.format_sql(sql, len(params))
319321
params = self.format_params(params)
320322
self.last_params = params
321-
return self.cursor.execute(sql, params)
323+
324+
try:
325+
return self.cursor.execute(sql, params)
326+
except IntegrityError:
327+
e = sys.exc_info()[1]
328+
raise utils.IntegrityError(*e.args)
329+
except DatabaseError:
330+
e = sys.exc_info()[1]
331+
raise utils.DatabaseError(*e.args)
322332

323333
def executemany(self, sql, params_list):
324334
sql = self.format_sql(sql)
@@ -329,7 +339,15 @@ def executemany(self, sql, params_list):
329339
else:
330340
raw_pll = params_list
331341
params_list = [self.format_params(p) for p in raw_pll]
332-
return self.cursor.executemany(sql, params_list)
342+
343+
try:
344+
return self.cursor.executemany(sql, params_list)
345+
except IntegrityError:
346+
e = sys.exc_info()[1]
347+
raise utils.IntegrityError(*e.args)
348+
except DatabaseError:
349+
e = sys.exc_info()[1]
350+
raise utils.DatabaseError(*e.args)
333351

334352
def format_results(self, rows):
335353
"""

0 commit comments

Comments
 (0)