From ec2428fea0012412e528d87d2df81c096c9efbd5 Mon Sep 17 00:00:00 2001 From: Enno Lohmeier Date: Mon, 21 Aug 2017 11:59:09 +0200 Subject: [PATCH] add mssql support using pyodbc --- dj_database_url.py | 2 ++ test_dj_database_url.py | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/dj_database_url.py b/dj_database_url.py index 1cfeef4..6dc1fbb 100644 --- a/dj_database_url.py +++ b/dj_database_url.py @@ -17,6 +17,7 @@ urlparse.uses_netloc.append('mysql') urlparse.uses_netloc.append('mysql2') urlparse.uses_netloc.append('mysqlgis') urlparse.uses_netloc.append('mysql-connector') +urlparse.uses_netloc.append('mssql') urlparse.uses_netloc.append('spatialite') urlparse.uses_netloc.append('sqlite') urlparse.uses_netloc.append('oracle') @@ -34,6 +35,7 @@ SCHEMES = { 'mysql2': 'django.db.backends.mysql', 'mysqlgis': 'django.contrib.gis.db.backends.mysql', 'mysql-connector': 'mysql.connector.django', + 'mssql': 'sql_server.pyodbc', 'spatialite': 'django.contrib.gis.db.backends.spatialite', 'sqlite': 'django.db.backends.sqlite3', 'oracle': 'django.db.backends.oracle', diff --git a/test_dj_database_url.py b/test_dj_database_url.py index 852af87..aaf931a 100644 --- a/test_dj_database_url.py +++ b/test_dj_database_url.py @@ -302,6 +302,19 @@ class DatabaseTestSuite(unittest.TestCase): assert url['OPTIONS']['options'] == '-c search_path=otherschema' assert 'currentSchema' not in url['OPTIONS'] + def test_mssql_parsing(self): + url = 'mssql://uf07k1i6d8ia0v:wegauwhgeuioweg@ec2-107-21-253-135.compute-1.amazonaws.com/d8r82722r2kuvn?driver=ODBC Driver 13 for SQL Server' + url = dj_database_url.parse(url) + + assert url['ENGINE'] == 'sql_server.pyodbc' + assert url['NAME'] == 'd8r82722r2kuvn' + assert url['HOST'] == 'ec2-107-21-253-135.compute-1.amazonaws.com' + assert url['USER'] == 'uf07k1i6d8ia0v' + assert url['PASSWORD'] == 'wegauwhgeuioweg' + assert url['PORT'] == '' + assert url['OPTIONS']['driver'] == 'ODBC Driver 13 for SQL Server' + assert 'currentSchema' not in url['OPTIONS'] + if __name__ == '__main__': unittest.main()