diff --git a/pydal/adapters/mssql.py b/pydal/adapters/mssql.py index f58418341..9d2ce870f 100644 --- a/pydal/adapters/mssql.py +++ b/pydal/adapters/mssql.py @@ -16,7 +16,7 @@ def rowslice(self, rows, minimum=0, maximum=None): class MSSQL(SQLAdapter): dbengine = "mssql" - drivers = ("pyodbc", "pytds") + drivers = ("pyodbc", "pytds","pymssql") REGEX_DSN = "^.+$" REGEX_URI = ( @@ -205,3 +205,31 @@ def _initialize_(self): user=self.credential_decoder(user), passwd=self.credential_decoder(password), ) + +#Added support for Pymssql +@adapters.register_for("pymssql") +class PyMssql(MSSQL): + def _initialize_(self): + import pymssql + self.driver = pymssql + super(MSSQL, self)._initialize_() + ruri = self.uri.split("://", 1)[1] + if "@" not in ruri: + m = re.match(self.REGEX_DSN, ruri) + if not m: + raise SyntaxError("Invalid URI string in DAL") + self.dsn = m.group() + else: + m = re.match(self.REGEX_URI, ruri) + if not m: + raise SyntaxError("Invalid URI string in DAL: %s" % self.uri) + self.dsn = m.group("host") + self.driver_args.update( + user=self.credential_decoder(m.group("user")), + password=self.credential_decoder(m.group("password")) or "", + database=m.group("db"), + port=m.group("port") or "1433", + ) + + def connector(self): + return self.driver.connect(self.dsn, **self.driver_args) \ No newline at end of file diff --git a/pydal/base.py b/pydal/base.py index e538015aa..6691e569c 100644 --- a/pydal/base.py +++ b/pydal/base.py @@ -102,6 +102,7 @@ 'mssql3://web2py:none@A64X2/web2py_test' # better pagination (requires >= 2005) 'mssql4://web2py:none@A64X2/web2py_test' # best pagination (requires >= 2012) 'pytds://user:password@server:port/database' # python-tds + 'pymssql://user:password@server:port/database' # python-pymssql 'oracle://username:password@database' 'firebird://user:password@server:3050/database' 'db2:ibm_db_dbi://DSN=dsn;UID=user;PWD=pass' diff --git a/pydal/drivers.py b/pydal/drivers.py index 1d4f21d59..d2546fff8 100644 --- a/pydal/drivers.py +++ b/pydal/drivers.py @@ -189,3 +189,10 @@ DRIVERS["pytds"] = pytds except: pass + +try: + import pymssql + + DRIVERS["pymssql"] = pymssql +except: + pass