使用 pyodbc + sqlalchemy 連接 SQLServer 資料庫的時候遇到一個報錯: [IM002] [Microsoft][ODBC 驅動程式管理器] 未發現資料來源名稱並且未指定預設驅動程式 (0) (SQLDriverConnect)
。
查閱 sqlalchemy mssql+pyodbc 資料庫文件 後發現:
需要裝 ODBC 驅動。並且如果你要是用 hostname 方式來連接資料庫的話,還需要指定驅動名字,但是發現有好多種 driver,一個 driver 還有不同的名字。於是研究了一番。
怎麼這麼多驅動#
引用並重新編輯一下 Microsoft SQL Server 的驅動程式歷史記錄 - SQL Server | Microsoft Docs 中一段很清晰的描述:
有三代不同的 Microsoft ODBC Driver for SQL Server。
- 第一代 “SQL Server” ODBC 驅動程式仍作為 Windows Data Access 組件 的一部分提供。對於新開發的程式,不建議使用此驅動程式。
- 從 SQL Server 2005 開始,SQL Server Native Client 包含一個 ODBC 介面,並且它是 SQL Server 2005 至 SQL Server 2012 中隨附的 ODBC 驅動程式。 對於新開發,也不建議使用此驅動程式。
- 在 SQL Server 2012 之後,Microsoft ODBC Driver for SQL Server 驅動程式隨最新的伺服器功能進行更新。
SQL Server Native Client#
SQL Server 2005 引入了 SQL Server Native Client 的支持,可用於 ODBC 的連接。
SQL Server 2005 至 SQL Server 2012 都在進行 SQL Server Native Client(通常縮寫為 SNAC)的開發。SQL Server Native Client 10.0 跟著 SQL Server 2008 一起發版。SQL Server Native Client 11.0 跟著 SQL Server 2012 一起發版。
可以在這兒下載到所有的歷史版本:Download SQL Server Native Client - ConnectionStrings.com
想使用的話找到最新版的安裝就行,驅動都是向前相容的。需要注意的就是不同的 SQLServer 版本設定的驅動名字:
Driver={SQL Server Native Client}
(SQL Server 2005)Driver={SQL Server Native Client 10.0}
(SQL Server 2008)Driver={SQL Server Native Client 11.0}
(SQL Server 2012 及之後)
但是微軟在 13 年宣布了新版的 ODBC Driver,也就是下面這個。在 17 年放棄了對 SNAC 的開發,被下面這個驅動取代,新版的驅動性能更好,支持 SQLServer 2012 之後的資料庫的新特性。
Microsoft ODBC Driver for SQL Server#
使用方法也是安裝好驅動程式,設定驅動名字。
驅動名字格式:
Driver={ODBC Driver XX for SQL Server}
(XX 是你安裝的驅動版本的名字)
資料庫版本 → ↓ 驅動程式版本 | Azure SQL Database | Azure Synapse Analytics | Azure SQL 托管實例 | SQL Server 2019 | SQL Server 2017 | SQL Server 2016 | SQL Server 2014 | SQL Server 2012 | SQL Server 2008 R2 | SQL Server 2008 | SQL Server 2005 |
---|---|---|---|---|---|---|---|---|---|---|---|
17.6 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | |||
17.5 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | |||
17.4 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | |||
17.3 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | |
17.2 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | ||
17.1 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | ||
17.0 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | 是 | ||
13.1 | 是 | 是 | 是 | 是 | 是 | 是 | |||||
13 | 是 | 是 | 是 | 是 | 是 | ||||||
11 | 是 | 是 | 是 | 是 | 是 |
SQL 版本相容性 | 表格來自 Microsoft
總結#
ODBC Driver for SQL Server
的性能更好,新版本有很多優化,有新特性,2021 年做開發就要選他。
不同的驅動版本的支持的資料庫版本也不同。請你一定要看好自己的 SQLServer 版本,去安裝對應版本的驅動,然後配置好驅動名字。
還發現了一個非常棒的網站:ConnectionStrings
ConnectionStrings.com helps developers connect software to data. It's a straight to the point reference about connection strings, a knowledge base of articles and database connectivity content and a host of Q & A forums where developers help each other finding solutions.
ConnectionStrings.com 幫助開發人員將軟體連接到資料庫。它是一個關於連接字串的直接參考、一個資料庫連接內容和文章的知識庫,同時也是一個問答論壇,開發人員可以在這裡互相幫助尋找解決方案。
參考連結#
- sql server - Differences Between Drivers for ODBC Drivers - Stack Overflow
- Windows 上的 ODBC Driver for SQL Server 發行說明 - SQL Server | Microsoft Docs
- Installing - SQL Server Native Client | Microsoft Docs
- Driver history for Microsoft SQL Server - SQL Server | Microsoft Docs
- 系統要求、安裝和驅動程式文件 - SQL Server | Microsoft Docs