大家好
最近重新安裝 django 到 windows server MSSQL 2019 時候
又遇到一個問題
File "C:\Python37\lib\site-packages\django\db\backends\base\base.py", line 232, in _cursor self.ensure_connection() File "C:\Python37\lib\site-packages\django\db\backends\base\base.py", line 216, in ensure_connection self.connect() File "C:\Python37\lib\site-packages\django\db\utils.py", line 89, in __exit__ raise dj_exc_value.with_traceback(traceback) from exc_value File "C:\Python37\lib\site-packages\django\db\backends\base\base.py", line 216, in ensure_connection self.connect() File "C:\Python37\lib\site-packages\django\db\backends\base\base.py", line 194, in connect self.connection = self.get_new_connection(conn_params) File "C:\Python37\lib\site-packages\sql_server\pyodbc\base.py", line 307, in get_new_connection timeout=timeout) django.db.utils.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC 驅動程式管理員] 找不到資料來源名稱且未指定預設的驅動程式 (0) (SQLDriverConnect)') TEST 818105 D:\test_django\test\test\settings.ini Performing system checks...
當我要連線DB時候會發現這樣的錯誤
之前我使用 MSSQL 2017的時候還沒這問題
但是我把它移動到 SERVER 是 SQL 2019的時候跑出這錯誤
研究後發現是設定值的問題
DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', 'NAME': 'nlp', 'HOST':'127.0.0.1\SQLEXPRESS', 'USER':'root', 'PASSWORD':'123456', 'PORT':'54321', 'OPTIONS':{ 'provider':'sqloledb', #'provider':'SQLEXPRESS', #'extra_params':'DataTypeCompatibility=80;MARS Connection=True' #'host_is_server': True, 'DRIVER':'SQL Server Native Client 11.0', #原本只有這個 'driver':'SQL Server Native Client 11.0', #新增了這個 'MARS_Connection': True, } }, }
但是修改後還是有以下錯誤
results = self.execute_sql(MULTI, chunked_fetch=chunked_fetch, chunk_size=chunk_size) File "C:\Python37\lib\site-packages\django\db\models\sql\compiler.py", line 1052, in execute_sql sql, params = self.as_sql() File "C:\Python37\lib\site-packages\sql_server\pyodbc\compiler.py", line 176, in as_sql supports_offset_clause = self.connection.sql_server_version >= 2012 File "C:\Python37\lib\site-packages\django\utils\functional.py", line 37, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "C:\Python37\lib\site-packages\sql_server\pyodbc\base.py", line 395, in sql_server_version raise NotSupportedError('SQL Server v%d is not supported.' % ver) django.db.utils.NotSupportedError: SQL Server v15 is not supported.
發現是 sql_server 套件的支援度問題
可以修改(套件中的路徑)
C:\Python37\Lib\site-packages\sql_server\pyodbc\base.py
# 在 154 左右 _sql_server_versions = { 10: 2008, 11: 2012, 12: 2014, 13: 2016, 14: 2017, 15: 2019, #新增 2019 版本對應 }
因為其實新版語法並沒有改變很多
所以可以直接支援
給大家參考囉

留言板
歡迎留下建議與分享!希望一起交流!感恩!