用于 32 位 python (3.6) 的 32 位 pyodbc 可与 Microsoft 的 64 位 odbc 驱动程序配合使用。为什么?
32bit pyodbc for 32bit python (3.6) works with microsoft's 64 bit odbc driver. Why?
我能观察到的:
- 我正在使用 windows 7 64 位我的代码(建立一个 odbc 连接
网络上的 SQL 服务器,仅进行简单的读取操作)是
用 python 3.6.2 32 位
编写
- 我 pip 安装了 pyodbc,所以我假设它也是 32 位的。
- 我从微软网站下载并安装了 64 位 "Microsoft® ODBC Driver 13.1 for SQL Server®"。
- 我的 python 代码连接到
网络上的其他计算机,其中 运行 server2003 32 位和 SQL Server 2005(32 位)或 sql2008(32 位)。
设置有效。
另外:粗略测试发现,以上设置可以成功连接到Microsoft server2008(64bit) 运行ning sql2012(64bit) [=38=下的配置] ] 为空(意思是,缺少 32 位 dll),而默认的 64 位网络连接配置包含通常的配置选项,如 ip 地址和侦听端口信息。
我自己的解释:
[1] 客户端和服务器的 OS 和 ODBC 接口可以是任何 32/64 位组合,但通过我的计算机和 sql 计算机之间的网络传输的协议将是相同的。
[2] 32 位 python+pyodbc 可以与微软的 64 位 odbc 驱动程序通信,因为... 32 位 python 知道如何使用 64 位 DLL...?
32 位应用程序无法调用 64 位 dll,因此 python32 位肯定无法与 64 位驱动程序通信。
sql 服务器的 msodbc 驱动程序本质上是一个 dll 文件:msodbcsql13.dll
我刚刚发现(微软甚至没有提到)"odbc for sql server 13.1 x64" 将在 system32 中安装 64 位 msodbcsql13.dll,在 SysWOW64 中安装 32 位 msodbcsql13.dll(32 位版本的 "system32" 在 64 位 windows 系统上)
但是我不能确定 32 位客户端与 64 位 sql 服务器之间的网络协议与 64 位客户端与 64 位 sql 服务器之间的网络协议相同。但是,我相信,一旦客户端向服务器发出网络请求,32 位或 64 位就不再重要了。有人请对此发表评论
我能观察到的:
- 我正在使用 windows 7 64 位我的代码(建立一个 odbc 连接 网络上的 SQL 服务器,仅进行简单的读取操作)是 用 python 3.6.2 32 位 编写
- 我 pip 安装了 pyodbc,所以我假设它也是 32 位的。
- 我从微软网站下载并安装了 64 位 "Microsoft® ODBC Driver 13.1 for SQL Server®"。
- 我的 python 代码连接到 网络上的其他计算机,其中 运行 server2003 32 位和 SQL Server 2005(32 位)或 sql2008(32 位)。
设置有效。
另外:粗略测试发现,以上设置可以成功连接到Microsoft server2008(64bit) 运行ning sql2012(64bit) [=38=下的配置] ] 为空(意思是,缺少 32 位 dll),而默认的 64 位网络连接配置包含通常的配置选项,如 ip 地址和侦听端口信息。
我自己的解释:
[1] 客户端和服务器的 OS 和 ODBC 接口可以是任何 32/64 位组合,但通过我的计算机和 sql 计算机之间的网络传输的协议将是相同的。
[2] 32 位 python+pyodbc 可以与微软的 64 位 odbc 驱动程序通信,因为... 32 位 python 知道如何使用 64 位 DLL...?
32 位应用程序无法调用 64 位 dll,因此 python32 位肯定无法与 64 位驱动程序通信。
sql 服务器的 msodbc 驱动程序本质上是一个 dll 文件:msodbcsql13.dll
我刚刚发现(微软甚至没有提到)"odbc for sql server 13.1 x64" 将在 system32 中安装 64 位 msodbcsql13.dll,在 SysWOW64 中安装 32 位 msodbcsql13.dll(32 位版本的 "system32" 在 64 位 windows 系统上)
但是我不能确定 32 位客户端与 64 位 sql 服务器之间的网络协议与 64 位客户端与 64 位 sql 服务器之间的网络协议相同。但是,我相信,一旦客户端向服务器发出网络请求,32 位或 64 位就不再重要了。有人请对此发表评论