summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/connectors/mxodbc.py
diff options
context:
space:
mode:
authorBrad Allen <bradallen137@gmail.com>2010-03-11 16:24:06 -0600
committerBrad Allen <bradallen137@gmail.com>2010-03-11 16:24:06 -0600
commit96ed4865be2609d1a314d0c6ba9945ca682ef100 (patch)
tree2385a3f19104dccb3489d12f302a6910f6b69a35 /lib/sqlalchemy/connectors/mxodbc.py
parent630c84fdd73703fb2b22f10a6afccdc7ca6da564 (diff)
downloadsqlalchemy-96ed4865be2609d1a314d0c6ba9945ca682ef100.tar.gz
Converted mxODBC's raised Warning exceptions into normal Python warnings.
Diffstat (limited to 'lib/sqlalchemy/connectors/mxodbc.py')
-rw-r--r--lib/sqlalchemy/connectors/mxodbc.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/sqlalchemy/connectors/mxodbc.py b/lib/sqlalchemy/connectors/mxodbc.py
index fd1a69ace..47a5904b8 100644
--- a/lib/sqlalchemy/connectors/mxodbc.py
+++ b/lib/sqlalchemy/connectors/mxodbc.py
@@ -1,9 +1,11 @@
import sys
import re
+import warnings
from sqlalchemy.connectors import Connector
from mx.ODBC import InterfaceError
+from mx.ODBC.Error import Warning as MxOdbcWarning
class MxODBCConnector(Connector):
driver='mxodbc'
@@ -31,6 +33,8 @@ class MxODBCConnector(Connector):
def connect(conn, rec):
conn.stringformat = self.dbapi.MIXED_STRINGFORMAT
conn.datetimeformat = self.dbapi.PYDATETIME_DATETIMEFORMAT
+ conn.errorhandler = error_handler
+ # Alternatives to experiment with:
#conn.bindmethod = self.dbapi.BIND_USING_PYTHONTYPE
#conn.bindmethod = self.dbapi.BIND_USING_SQLTYPE
@@ -90,3 +94,17 @@ class MxODBCConnector(Connector):
cursor.execute(statement, tuple(parameters))
except InterfaceError:
cursor.executedirect(statement, tuple(parameters))
+
+
+def error_handler(connection, cursor, errorclass, errorvalue):
+ """
+ Adjust mxODBC's raised Warnings to emit Python standard warnings.
+ """
+ if issubclass(errorclass, MxOdbcWarning):
+ errorclass.__bases__ = (Warning,)
+ warnings.warn(message=str(errorvalue),
+ category=errorclass,
+ stacklevel=2)
+ else:
+ raise errorclass, errorvalue
+