2017-07-27 121 views
0

我可以觀察到:
用於32位python(3.6)的32位pyodbc適用於Microsoft的64位odbc驅動程序。爲什麼?

  • 我使用Windows 7 64位我的代碼(建立與 一個SQL服務器在網絡上的ODBC連接,只有簡單的讀取工作)是用Python編寫的3.6 。 2 32bit
  • 我點了安裝pyodbc,所以我假設也是32位。
  • 我從Microsoft網站下載並安裝了64位「Microsoft®ODBC驅動程序13.1 for SQLServer®」。
  • 我的python代碼連接到網絡上運行server2003 32位和SQL Server 2005(32位)或sql2008(32位)的其他計算機上的 。

設置工作。

此外:粗略測試表明,上述設置可以成功連接到運行sql2012(64位)的Microsoft server2008(64位)的計算機,並且「SQL Server Network Connection(32位)」下的配置爲空(即, 32位DLL丟失),而默認的64位網絡連接配置包含通常的配置選項,如IP地址和偵聽端口信息。

我自己的解釋:
[1]在客戶端和服務器的操作系統和ODBC接口可以是任何32/64位的組合,但旅行經過我的計算機和SQL Server的計算機會之間的網絡協議相同。
[2] 32位python + pyodbc可以與微軟的64位odbc驅動程序交談,因爲... 32位python知道如何使用64位DLL ...?

回答

1

32位應用程序無法調用64位dll,因此python 32bit無法確定與64位驅動程序通信。

用於SQL Server msodbc司機在本質上是一個DLL文件:msodbcsql13.dll

我只是發現了(它甚至沒有通過微軟提到的)說:「ODBC SQL Server的13.1 64」將安裝64位msodbcsql13在system32中的.dll和SysWOW64中的32位msodbcsql13.dll(64位Windows系統上的「system32」的32位版本)

我不能確定32位客戶端與64位sql服務器交談時的網絡協議是與64位客戶端與64位SQL服務器對話相同。但是,我認爲,一旦客戶端向服務器請求網絡,32位或64位無關緊要。有人請對此發表評論

+0

*「我認爲,一旦客戶端向服務器請求網絡時,32位或64位無關緊要。」* - 這是正確的。 –

+0

@GordThompson謝謝,是因爲ODBC規範鎖定了協議以在驅動程序之間交換信息。所以我們沒有像32位/ 64位指針混淆的問題,或者像int這樣的問題可以是32位或64位。服務器上的64位odbc驅動程序可以理解由32位odbc客戶端發出的odbc語言。它幾乎就像COM對象,鐵包層規格,不管位數。 – eliu

相關問題