【问题标题】:32bit pyodbc for 32bit python (3.6) works with microsoft's 64 bit odbc driver. Why?32 位 python (3.6) 的 32 位 pyodbc 与微软的 64 位 odbc 驱动程序一起使用。为什么?
【发布时间】:2017-07-27 23:12:17
【问题描述】:

我能观察到的:

  • 我使用的是 windows 7 64bit 我的代码(与 网络上的 SQL 服务器,仅简单的读取操作)是 用python 3.6.2 32bit编写
  • 我 pip 安装了 pyodbc,所以我假设它也是 32 位的。
  • 我从微软网站下载并安装了 64 位“Microsoft® ODBC Driver 13.1 for SQL Server®”。
  • 我的 python 代码连接到 网络上运行 server2003 32bit 和 SQL Server 2005(32bit) 或 sql2008(32bit) 的其他计算机。

设置有效。

另外:粗略测试表明,上述设置可以成功连接到运行sql2012(64bit)的Microsoft server2008(64bit)的计算机,而“SQL Server Network Connection (32bit)”下的配置为空(即32bit) dll 丢失),而默认的 64 位网络连接配置包含常用的配置选项,如 ip 地址和侦听端口信息。

我自己的解释:
[1] 客户端和服务器的 OS 和 ODBC 接口可以是任何 32/64 位组合,但是通过我的计算机和 sql 计算机之间的网络传输的协议将是相同的。
[2] 32位python+pyodbc可以和微软的64位odbc驱动对话,因为... 32位python知道如何使用64位DLL...?

【问题讨论】:

    标签: python-3.x odbc driver 32bit-64bit pyodbc


    【解决方案1】:

    32 位应用程序不能调用 64 位 dll,因此 python 32 位肯定不能与 64 位驱动程序对话。

    sql server的msodbc驱动本质上是一个dll文件:msodbcsql13.dll

    我刚刚发现(微软甚至没有提到)“odbc for sql server 13.1 x64”将在 system32 中安装 64 位 msodbcsql13.dll,在 SysWOW64 中安装 32 位 msodbcsql13.dll(“system32”的 32 位版本) 64位windows系统)

    但是,我不能确定 32 位客户端与 64 位 sql 服务器之间的网络协议是否与 64 位客户端与 64 位 sql 服务器之间的网络协议相同。但是,我相信,一旦客户端向服务器发出请求,32 位或 64 位就不再重要了。有人请对此发表评论

    【讨论】:

    • “我相信,一旦客户端向服务器发出请求,32 位或 64 位就不再重要了。” - 这是正确的。
    • @GordThompson 谢谢,这是因为 ODBC 规范锁定了驱动程序之间交换信息的协议。这样我们就不会遇到像 32bit/64bit 指针混淆这样的问题,或者像 int 这样的问题可以是 32 位或 64 位。服务器上的 64 位 odbc 驱动程序可以理解 32 位 odbc 客户端使用的 odbc 语言。它几乎就像 COM 对象,铁包规范,不分位数。
    猜你喜欢
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2018-07-10
    • 2011-01-23
    • 2011-08-03
    • 1970-01-01
    相关资源
    最近更新 更多