summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects/mssql/pymssql.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2009-08-06 21:11:27 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2009-08-06 21:11:27 +0000
commit8fc5005dfe3eb66a46470ad8a8c7b95fc4d6bdca (patch)
treeae9e27d12c9fbf8297bb90469509e1cb6a206242 /lib/sqlalchemy/dialects/mssql/pymssql.py
parent7638aa7f242c6ea3d743aa9100e32be2052546a6 (diff)
downloadsqlalchemy-8fc5005dfe3eb66a46470ad8a8c7b95fc4d6bdca.tar.gz
merge 0.6 series to trunk.
Diffstat (limited to 'lib/sqlalchemy/dialects/mssql/pymssql.py')
-rw-r--r--lib/sqlalchemy/dialects/mssql/pymssql.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/lib/sqlalchemy/dialects/mssql/pymssql.py b/lib/sqlalchemy/dialects/mssql/pymssql.py
new file mode 100644
index 000000000..0961c2e76
--- /dev/null
+++ b/lib/sqlalchemy/dialects/mssql/pymssql.py
@@ -0,0 +1,46 @@
+from sqlalchemy.dialects.mssql.base import MSDialect
+from sqlalchemy import types as sqltypes
+
+
+class MSDialect_pymssql(MSDialect):
+ supports_sane_rowcount = False
+ max_identifier_length = 30
+ driver = 'pymssql'
+
+ @classmethod
+ def import_dbapi(cls):
+ import pymssql as module
+ # pymmsql doesn't have a Binary method. we use string
+ # TODO: monkeypatching here is less than ideal
+ module.Binary = lambda st: str(st)
+ return module
+
+ def __init__(self, **params):
+ super(MSSQLDialect_pymssql, self).__init__(**params)
+ self.use_scope_identity = True
+
+ # pymssql understands only ascii
+ if self.convert_unicode:
+ util.warn("pymssql does not support unicode")
+ self.encoding = params.get('encoding', 'ascii')
+
+
+ def create_connect_args(self, url):
+ if hasattr(self, 'query_timeout'):
+ # ick, globals ? we might want to move this....
+ self.dbapi._mssql.set_query_timeout(self.query_timeout)
+
+ keys = url.query
+ if keys.get('port'):
+ # pymssql expects port as host:port, not a separate arg
+ keys['host'] = ''.join([keys.get('host', ''), ':', str(keys['port'])])
+ del keys['port']
+ return [[], keys]
+
+ def is_disconnect(self, e):
+ return isinstance(e, self.dbapi.DatabaseError) and "Error 10054" in str(e)
+
+ def do_begin(self, connection):
+ pass
+
+dialect = MSDialect_pymssql \ No newline at end of file