連接Python和pyodbc磚

你可以通過ODBC連接從你本地Python代碼在磚集群或SQL數據倉庫。要做到這一點,您可以使用開源的Python代碼模塊pyodbc

按照下列指示來安裝、配置和使用pyodbc

更多信息pyodbc,請參閱pyodbc維基

請注意

磚了Python的磚SQL的連接器作為一個替代pyodbc。Python的磚SQL的連接器是容易設置和使用,並有一組更健壯的編碼結構,比pyodbc。然而pyodbc獲取查詢結果的時候可能有更好的性能高於10 MB。

需求

  • 當地開發機器運行下列之一:

    • macOS

    • 窗戶

    • 一個支持Unix或Linux發行版rpm程序. deb文件

  • 皮普

  • 對於Unix, Linux或macOS家釀

  • 集群磚,磚SQL倉庫,或兩者兼而有之。有關更多信息,請參見創建一個集群配置SQL倉庫

按照說明Unix, Linux或macOS窗戶

Unix, Linux或macOS

如果你當地的Python代碼運行在Unix、Linux、或macOS機器,遵循這些指令。

步驟1:安裝軟件

在這個步驟中,你下載並安裝磚ODBC驅動程序unixodbc包,pyodbc模塊。(pyodbc模塊需要unixodbc包在Unix、Linux和macOS)。

  1. 下載磚ODBC驅動程序

  2. 安裝磚ODBC驅動程序,打開SimbaSparkODBC.zip你下載的文件。

  3. 做下列之一:

    • macOS:雙擊提取辛巴Spark.dmg文件。然後雙擊SimbaSparkODBC.pkg文件顯示,遵循任何屏幕方向。

    • Linux:使用發行版的包管理器實用工具安裝提取simbaspark.rpmsimbaspark.deb文件,並遵守任何屏幕方向。

  4. 安裝unixodbc方案:從終端,運行釀造安裝unixodbc。有關更多信息,請參見unixodbc家釀的網站。

  5. 安裝pyodbc模塊:從終端,運行皮普安裝pyodbc。有關更多信息,請參見pyodbc在PyPI網站安裝pyodbc Wiki。

步驟2:配置軟件

指定連接細節的磚集群和SQL的倉庫pyodbc使用。

請注意

作為一個安全最佳實踐進行身份驗證時使用自動化工具,係統、腳本和應用程序,磚建議您使用OAuth令牌或個人訪問令牌屬於服務主體而不是用戶工作區。為服務主體,創建令牌服務主體的管理令牌

  1. 將以下內容添加到/etc/odbc.ini文件在您的機器上:

    提示

    如果你不想或不能使用/etc/odbc.ini文件在您的機器上,您可以指定在Python代碼直接連接細節。要做到這一點,跳過這一步,繼續休息步驟3:測試你的配置

    (ODBC數據源)Databricks_Cluster=辛巴火花ODBC驅動程序(Databricks_Cluster)司機=<驅動器路徑>描述=辛巴火花DSN ODBC驅動程序主機=<服務器主機>港口=443年模式=默認的SparkServerType=3AuthMech=3UID=令牌鬆材線蟲病=< personal-access-token >ThriftTransport=2SSL=1HTTPPath=< http-path >

    在前麵的配置文件,替換占位符後,然後保存文件:

    • 取代<驅動器路徑>與下列之一:

      • macOS:/圖書館/辛巴/ / lib / libsparkodbc_sbu.dylib火花

      • Linux 64位:/ opt /辛巴/ / lib / 64 / libsparkodbc_sb64.so火花

      • Linux 32位:/ opt /辛巴/ / lib / 32 / libsparkodbc_sb32.so火花

    • 取代<服務器主機>服務器主機名價值的高級選項> JDBC / ODBC選項卡為您的集群。

    • 取代< personal-access-token >與你的價值個人訪問令牌為你的磚工作區。

    • 取代< http-path >HTTP路徑價值的高級選項> JDBC / ODBC選項卡為您的集群。

    提示

    允許pyodbc開關連接到不同的集群中,添加一個條目(ODBC數據來源)下麵的部分和一個匹配的條目(Databricks_Cluster)與特定的連接細節。每個條目必須有一個唯一的名稱在這個文件中。

    (ODBC數據源)SQL_Warehouse=辛巴火花ODBC驅動程序(SQL_Warehouse)司機=<驅動器路徑>主機=<服務器主機>港口=443年模式=默認的SparkServerType=3AuthMech=3UID=令牌鬆材線蟲病=< personal-access-token >ThriftTransport=2SSL=1HTTPPath=< http-path >

    在前麵的配置文件,替換占位符後,然後保存文件:

    • 取代<驅動器路徑>與下列之一:

      • macOS:/圖書館/辛巴/ / lib / libsparkodbc_sbu.dylib火花

      • Linux 64位:/ opt /辛巴/ / lib / 64 / libsparkodbc_sb64.so火花

      • Linux 32位:/ opt /辛巴/ / lib / 32 / libsparkodbc_sb32.so火花

    • 取代<服務器主機>服務器主機名價值的連接細節為你的SQL選項卡倉庫。

    • 取代< personal-access-token >與你的價值個人訪問令牌為您的SQL倉庫。

    • 取代< http-path >HTTP路徑價值的連接細節為你的SQL選項卡倉庫。

    提示

    允許pyodbc開關連接到一個不同的SQL倉庫,將一個條目添加到(ODBC數據來源)下麵的部分和一個匹配的條目(SQL_Warehouse)與特定的連接細節。每個條目必須有一個唯一的名稱在這個文件中。

  2. 添加之前的信息添加到/etc/odbc.ini文件到相應的/usr/local/etc/odbc.ini文件在您的機器上。

  3. 將以下內容添加到/etc/odbcinst.ini文件在您的機器上:

    (ODBC驅動程序)辛巴SQL Server ODBC驅動程序=安裝(辛巴火花ODBC驅動程序)司機=<驅動器路徑>

    在前麵的內容中,替換<驅動器路徑>用下列值之一,然後保存文件:

    • macOS:/圖書館/辛巴/ / lib / libsparkodbc_sbu.dylib火花

    • Linux 64位:/ opt /辛巴/ / lib / 64 / libsparkodbc_sb64.so火花

    • Linux 32位:/ opt /辛巴/ / lib / 32 / libsparkodbc_sb32.so火花

  4. 你剛才添加的信息添加到/etc/odbcinst.ini文件到相應的/usr/local/etc/odbcinst.ini文件在您的機器上。

  5. 添加以下信息結束的時候simba.sparkodbc.ini文件在您的機器上,然後保存文件。macOS,這個文件/圖書館/辛巴/火花/ lib

    DriverManagerEncoding=UTF- - - - - -16ODBCInstLib= /usr/當地的/地窖/unixodbc/2.3.9/自由/libodbcinstdylib

步驟3:測試你的配置

在這個步驟中,您編寫和運行Python代碼使用磚集群或磚SQL倉庫查詢數據庫表並顯示查詢結果的前兩行。

查詢通過使用一個集群:

  1. 創建一個文件命名pyodbc-test-cluster.py用下麵的內容。取代<表名稱>查詢數據庫表的名稱,保存文件,然後運行該文件與您的Python解釋器。

    進口pyodbc# <表名稱>替換為數據庫表的名稱來查詢。table_name=“<表名稱>”#連接到集群使用磚#您在前麵創建的數據源名稱(DSN)。康涅狄格州=pyodbc連接(“DSN = Databricks_Cluster”,自動提交=真正的)#運行一個SQL查詢使用前麵的連接。光標=康涅狄格州光標()光標執行(f“SELECT *{table_name}限製2”)#打印行從查詢檢索。打印(f“查詢輸出:SELECT *{table_name}限製2\ n)光標fetchall():打印()

    請注意

    如果你跳過步驟2:配置軟件,沒有使用一個/etc/odbc.ini文件,然後在調用指定連接細節pyodbc.connect,例如:

    康涅狄格州=pyodbc連接(“司機= <驅動器路徑>;”+“主機= <服務器主機>;”+“端口= 443;”+“模式=違約;”+“SparkServerType = 3;”+“AuthMech = 3;”+“UID =令牌;”+“PWD = < personal-access-token >;”+“ThriftTransport = 2;+“SSL = 1;”+“HTTPPath = < http-path >”,自動提交=真正的)

    替換占位符的值作為描述步驟2:配置軟件

  2. 加快運行代碼,啟動集群相對應的HTTPPath設置在你的odbc.ini文件。

  3. 運行pyodbc-test-cluster.py文件與您的Python解釋器。的前兩行顯示數據庫表。

通過使用一個SQL查詢倉庫:

  1. 創建一個文件命名pyodbc-test-cluster.py。取代<表名稱>查詢數據庫表的名稱,然後保存文件。

    進口pyodbc# <表名稱>替換為數據庫表的名稱來查詢。table_name=“<表名稱>”#連接到SQL倉庫使用#您在前麵創建的數據源名稱(DSN)。康涅狄格州=pyodbc連接(“DSN = SQL_Warehouse”,自動提交=真正的)#運行一個SQL查詢使用前麵的連接。光標=康涅狄格州光標()光標執行(f“SELECT *{table_name}限製2”)#打印行從查詢檢索。打印(f“查詢輸出:SELECT *{table_name}限製2\ n)光標fetchall():打印()

    請注意

    如果你跳過步驟2:配置軟件,沒有使用一個/etc/odbc.ini文件,然後在調用指定連接細節pyodbc.connect,例如:

    康涅狄格州=pyodbc連接(“司機= <驅動器路徑>;”+“主機= <服務器主機>;”+“端口= 443;”+“模式=違約;”+“SparkServerType = 3;”+“AuthMech = 3;”+“UID =令牌;”+“PWD = < personal-access-token >;”+“ThriftTransport = 2;+“SSL = 1;”+“HTTPPath = < http-path >”,自動提交=真正的)

    替換占位符的值作為描述步驟2:配置軟件

  2. 運行代碼,加快啟動對應的SQL倉庫HTTPPath設置在你的odbc.ini文件。

  3. 運行pyodbc-test-warehouse.py文件與您的Python解釋器。的前兩行顯示數據庫表。

下一個步驟

  • Python測試代碼運行在不同的集群或SQL倉庫,更改設置在前麵兩個odbc.ini文件。或者添加一個新條目(ODBC數據來源)部分,連同匹配的連接細節,兩個odbc.ini文件。然後在測試代碼更改DSN名稱匹配相關的名稱(ODBC數據來源)

  • 運行Python測試代碼與一個不同的數據庫表,更改table_name價值。

  • 運行Python測試代碼與一個不同的SQL查詢,更改執行命令字符串。

窗戶

如果您的本地Python代碼運行在Windows機器上,遵循這些指示。

步驟1:安裝軟件

  1. 下載磚ODBC驅動程序

  2. 安裝磚ODBC驅動程序,打開SimbaSparkODBC.zip你下載的文件。

  3. 雙擊提取辛巴Spark.msi文件,並遵守任何屏幕方向。

  4. 安裝pyodbc模塊:從一個行政命令提示符運行皮普安裝pyodbc。有關更多信息,請參見pyodbc在PyPI網站安裝pyodbc Wiki。

步驟2:配置軟件

指定集群磚或磚SQL連接細節倉庫pyodbc使用。

為一個集群:指定連接細節

  1. 添加一個數據源名稱(DSN)包含關於您的集群信息:開始的ODBC數據源應用程序:開始菜單,開始打字ODBC,然後單擊ODBC數據源

  2. 用戶DSN選項卡上,單擊添加。在創建新數據源對話框中,單擊辛巴火花ODBC驅動程序,然後單擊完成

  3. 辛巴火花ODBC Driver DSN設置對話框,改變以下值:

    • 數據源名稱:Databricks_Cluster

    • 描述:我的集群

    • 火花服務器類型:SparkThriftServer(火花1.1後)

    • 主機(年代):服務器主機名價值的高級選項,JDBC / ODBC選項卡為您的集群。

    • 港口:443年

    • 數據庫:默認的

    • 機製:用戶的名字密碼

    • 用戶名:令牌

    • 密碼:你的價值個人訪問令牌為你的磚工作區。

    • 節約運輸:HTTP

  4. 點擊HTTP選項。在HTTP屬性對話框,HTTP路徑,輸入HTTP路徑價值的高級選項,JDBC / ODBC為您的集群選項卡,然後單擊好吧

  5. 點擊SSL選項。在SSL選項對話框,檢查啟用SSL框,然後單擊好吧

  6. 點擊測試。如果測試成功,單擊好吧

提示

允許pyodbc開關連接到不同的集群,重複這個過程與特定的連接細節。每個DSN必須有一個惟一名稱。

指定連接SQL倉庫的詳細信息:

  1. ODBC數據源應用程序,用戶DSN選項卡上,單擊添加。在創建新數據源對話框中,單擊辛巴火花ODBC驅動程序,然後單擊完成

  2. 辛巴火花ODBC驅動程序對話框中,輸入下列值:

    • 數據源名稱:SQL_Warehouse

    • 描述:我的倉庫

    • 火花服務器類型:SparkThriftServer(火花1.1後)

    • 主機(年代):服務器主機名價值的連接細節選項卡SQL倉庫。

    • 港口:443年

    • 數據庫:默認的

    • 機製:用戶的名字密碼

    • 用戶名:令牌

    • 密碼:你的價值個人訪問令牌為您的SQL倉庫。

    • 節約運輸:HTTP

  3. 點擊HTTP選項。在HTTP屬性對話框,HTTP路徑,輸入HTTP路徑價值的連接細節選項卡SQL倉庫,然後單擊好吧

  4. 點擊SSL選項。在SSL選項對話框,檢查啟用SSL框,然後單擊好吧

  5. 點擊測試。如果測試成功,單擊好吧

提示

允許pyodbc連接到開關連接到一個不同的SQL倉庫,重複這個過程與特定的連接細節。每個DSN必須有一個惟一名稱。

步驟3:測試你的配置

在這個步驟中,您編寫和運行Python代碼使用磚集群或磚SQL倉庫查詢數據庫表並顯示查詢結果的前兩行。

查詢通過使用一個集群:

  1. 創建一個文件命名pyodbc-test-cluster.py用下麵的內容。取代<表名稱>查詢數據庫表的名稱,然後保存文件。

    進口pyodbc# <表名稱>替換為數據庫表的名稱來查詢。table_name=“<表名稱>”#連接到集群使用磚#您在前麵創建的數據源名稱(DSN)。康涅狄格州=pyodbc連接(“DSN = Databricks_Cluster”,自動提交=真正的)#運行一個SQL查詢使用前麵的連接。光標=康涅狄格州光標()光標執行(f“SELECT *{table_name}限製2”)#打印行從查詢檢索。打印(f“查詢輸出:SELECT *{table_name}限製2\ n)光標fetchall():打印()
  2. 加快運行代碼,啟動集群相對應的主機(年代)的價值辛巴火花ODBC Driver DSN設置磚集群的對話框。

  3. 運行pyodbc-test-cluster.py文件與您的Python解釋器。的前兩行顯示數據庫表。

通過使用一個SQL查詢倉庫:

  1. 創建一個文件命名pyodbc-test-cluster.py。取代<表名稱>查詢數據庫表的名稱,然後保存文件。

    進口pyodbc# <表名稱>替換為數據庫表的名稱來查詢。table_name=“<表名稱>”#連接到SQL倉庫使用#您在前麵創建的數據源名稱(DSN)。康涅狄格州=pyodbc連接(“DSN = SQL_Warehouse”,自動提交=真正的)#運行一個SQL查詢使用前麵的連接。光標=康涅狄格州光標()光標執行(f“SELECT *{table_name}限製2”)#打印行從查詢檢索。打印(f“查詢輸出:SELECT *{table_name}限製2\ n)光標fetchall():打印()
  2. 運行代碼,加快啟動對應的SQL倉庫主機(年代)的價值辛巴火花ODBC Driver DSN設置對話框中為你的磚SQL的倉庫。

  3. 運行pyodbc-test-warehouse.py文件與您的Python解釋器。的前兩行顯示數據庫表。

下一個步驟

  • Python測試代碼運行在不同的集群或SQL倉庫,改變主機(年代)的價值辛巴火花ODBC Driver DSN設置對話框中為你的磚集群或磚SQL倉庫。或創建一個新的DSN。然後在測試代碼更改DSN名稱匹配相關的數據源名稱

  • 運行Python測試代碼與一個不同的數據庫表,更改table_name價值。

  • 運行Python測試代碼與一個不同的SQL查詢,更改執行命令字符串。

故障排除

當使用這一節將介紹一些常見的問題pyodbc磚。

Unicode解碼錯誤

問題:你收到一個錯誤消息類似如下:

<類的pyodbc。錯誤”>返回一組結果錯誤回溯(最近的電話最後):文件“/用戶/用戶/ .pyenv /版本/ 3.7.5 / lib / python3.7 /編碼/ utf_16_le。py”,行16日在解碼返回編解碼器。utf_16_le_decode(輸入錯誤,正確)UnicodeDecodeError: utf-16-le的編解碼器不能解碼字節位置2112 - 2113:非法utf - 16代理

導致:存在一個問題pyodbc版本4.0.31或低於運行查詢,返回時可以與這些症狀清單列長名稱或錯誤消息。這個問題已經固定的一個新版本pyodbc

解決方案:升級你的安裝pyodbc4.0.32版或以上。

一般故障排除

看到問題mkleehammer / pyodbc在GitHub庫。