大家好![]()
最近重新安裝 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 版本對應
}
因為其實新版語法並沒有改變很多
所以可以直接支援
給大家參考囉

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