使用 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