簡體   English   中英

使用 Pyodbc 從 WSL2 連接到 Windows 上的數據庫的 DSN 連接

[英]Connect with DSN Connection to Database on Windows from WSL2 with pyodbc

我希望使用在我的 Windows 10 機器上設置的 DSN 連接從我們的 Sage100 Financial 數據庫中提取數據。 我知道 DSN 連接設置正確,因為我能夠使用“獲取數據”查詢選項連接到 Microsoft Excel 中的數據庫和刷新數據。 我目前打開 Excel,刷新表格,然后在 WSL2 中使用 Python 來自動生成報告。

我想刪除工作流的 Excel / 刷新表部分並連接到 WSL2 中 VS Code 中的數據庫。

過去,我使用 Python / pyodbc 在我機器的 windows 端使用 Python 成功查詢數據庫,使用以下命令。 這加強了 Windows 端的 DSN 連接工作。

import pyodbc
import pandas as pandas

cnxn = pyodbc.connect("DSN=KGConnection", autocommit=True)
sql = """ SELECT * FROM IM_ItemWarehouse """

x = pd.read_sql(sql,cnxn)

然而,我的目標是使用 WSL2 進行所有查詢和進一步分析。 我發現這個 StackOverflow 鏈接接近正確答案,但我希望找到能讓我利用我知道有效的簡單 DSN 的東西。

任何幫助將不勝感激!

TL;DR - WSL2 上的 pyodbc 不能使用在 Windows 端定義的 ODBC DSN。

那是因為

  1. WSL2 (unixODBC) 上的 ODBC 驅動程序管理器無法“看到”Windows DSN,並且

  2. even if they were visible, the Windows ODBC DSNs would use the Windows version of the ODBC driver (eg, "msodbcsql17.dll" for MS SQL Server) and not the Linux version of the driver (eg, "libmsodbcsql-17.10.so. 2.1"),而 Linux 無法在本機運行 Windows DLL。

如果您想從 WSL2 建立到數據庫(即任何數據庫,無論其托管平台如何)的直接 ODBC 連接,您需要為該數據庫安裝 Linux 版本的 ODBC 驅動程序。

如果有問題的數據庫沒有 Linux ODBC 驅動程序但有 Windows ODBC 驅動程序,則可以通過以下方式創建間接連接

  • 在 Windows 上安裝 MS SQL Server Express Edition,
  • 通過該數據庫的 Windows ODBC 驅動程序創建到另一個數據庫的 SQL 服務器“鏈接服務器”,然后
  • 通過 WSL2 上的 MS SQL 服務器 ODBC 驅動程序的 Linux 版本訪問鏈接服務器

但這可能很容易證明比它的價值更麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM