連接Python和pyodbc磚
你可以通過ODBC連接從你本地Python代碼在磚集群或SQL數據倉庫。要做到這一點,您可以使用開源的Python代碼模塊pyodbc
。
按照下列指示來安裝、配置和使用pyodbc
。
更多信息pyodbc
,請參閱pyodbc維基。
請注意
磚了Python的磚SQL的連接器作為一個替代pyodbc
。Python的磚SQL的連接器是容易設置和使用,並有一組更健壯的編碼結構,比pyodbc
。然而pyodbc
獲取查詢結果的時候可能有更好的性能高於10 MB。
需求
按照說明Unix, Linux或macOS或窗戶。
Unix, Linux或macOS
如果你當地的Python代碼運行在Unix、Linux、或macOS機器,遵循這些指令。
步驟1:安裝軟件
在這個步驟中,你下載並安裝磚ODBC驅動程序unixodbc
包,pyodbc
模塊。(pyodbc
模塊需要unixodbc
包在Unix、Linux和macOS)。
下載磚ODBC驅動程序。
安裝磚ODBC驅動程序,打開
SimbaSparkODBC.zip
你下載的文件。做下列之一:
macOS:雙擊提取
辛巴Spark.dmg
文件。然後雙擊SimbaSparkODBC.pkg
文件顯示,遵循任何屏幕方向。Linux:使用發行版的包管理器實用工具安裝提取
simbaspark.rpm
或simbaspark.deb
文件,並遵守任何屏幕方向。
安裝
unixodbc
方案:從終端,運行釀造安裝unixodbc
。有關更多信息,請參見unixodbc家釀的網站。安裝
pyodbc
模塊:從終端,運行皮普安裝pyodbc
。有關更多信息,請參見pyodbc在PyPI網站安裝pyodbc Wiki。
步驟2:配置軟件
指定連接細節的磚集群和SQL的倉庫pyodbc
使用。
將以下內容添加到
/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)
與特定的連接細節。每個條目必須有一個唯一的名稱在這個文件中。添加之前的信息添加到
/etc/odbc.ini
文件到相應的/usr/local/etc/odbc.ini
文件在您的機器上。將以下內容添加到
/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火花
你剛才添加的信息添加到
/etc/odbcinst.ini
文件到相應的/usr/local/etc/odbcinst.ini
文件在您的機器上。添加以下信息結束的時候
simba.sparkodbc.ini
文件在您的機器上,然後保存文件。macOS,這個文件/圖書館/辛巴/火花/ lib
。DriverManagerEncoding=UTF- - - - - -16ODBCInstLib= /usr/當地的/地窖/unixodbc/2.3.9/自由/libodbcinst。dylib
步驟3:測試你的配置
在這個步驟中,您編寫和運行Python代碼使用磚集群或磚SQL倉庫查詢數據庫表並顯示查詢結果的前兩行。
查詢通過使用一個集群:
創建一個文件命名
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:配置軟件。
加快運行代碼,啟動集群相對應的
HTTPPath
設置在你的odbc.ini
文件。運行
pyodbc-test-cluster.py
文件與您的Python解釋器。的前兩行顯示數據庫表。
通過使用一個SQL查詢倉庫:
創建一個文件命名
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:配置軟件。
運行代碼,加快啟動對應的SQL倉庫
HTTPPath
設置在你的odbc.ini
文件。運行
pyodbc-test-warehouse.py
文件與您的Python解釋器。的前兩行顯示數據庫表。
窗戶
如果您的本地Python代碼運行在Windows機器上,遵循這些指示。
步驟2:配置軟件
指定集群磚或磚SQL連接細節倉庫pyodbc
使用。
為一個集群:指定連接細節
添加一個數據源名稱(DSN)包含關於您的集群信息:開始的ODBC數據源應用程序:開始菜單,開始打字
ODBC
,然後單擊ODBC數據源。在用戶DSN選項卡上,單擊添加。在創建新數據源對話框中,單擊辛巴火花ODBC驅動程序,然後單擊完成。
在辛巴火花ODBC Driver DSN設置對話框,改變以下值:
數據源名稱:
Databricks_Cluster
描述:
我的集群
火花服務器類型:
SparkThriftServer(火花1.1和後)
主機(年代):服務器主機名價值的高級選項,JDBC / ODBC選項卡為您的集群。
港口:
443年
數據庫:
默認的
機製:
用戶的名字和密碼
用戶名:
令牌
密碼:你的價值個人訪問令牌為你的磚工作區。
節約運輸:
HTTP
點擊HTTP選項。在HTTP屬性對話框,HTTP路徑,輸入HTTP路徑價值的高級選項,JDBC / ODBC為您的集群選項卡,然後單擊好吧。
點擊SSL選項。在SSL選項對話框,檢查啟用SSL框,然後單擊好吧。
點擊測試。如果測試成功,單擊好吧。
提示
允許pyodbc
開關連接到不同的集群,重複這個過程與特定的連接細節。每個DSN必須有一個惟一名稱。
指定連接SQL倉庫的詳細信息:
在ODBC數據源應用程序,用戶DSN選項卡上,單擊添加。在創建新數據源對話框中,單擊辛巴火花ODBC驅動程序,然後單擊完成。
在辛巴火花ODBC驅動程序對話框中,輸入下列值:
點擊HTTP選項。在HTTP屬性對話框,HTTP路徑,輸入HTTP路徑價值的連接細節選項卡SQL倉庫,然後單擊好吧。
點擊SSL選項。在SSL選項對話框,檢查啟用SSL框,然後單擊好吧。
點擊測試。如果測試成功,單擊好吧。
提示
允許pyodbc
連接到開關連接到一個不同的SQL倉庫,重複這個過程與特定的連接細節。每個DSN必須有一個惟一名稱。
步驟3:測試你的配置
在這個步驟中,您編寫和運行Python代碼使用磚集群或磚SQL倉庫查詢數據庫表並顯示查詢結果的前兩行。
查詢通過使用一個集群:
創建一個文件命名
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():打印(行)
加快運行代碼,啟動集群相對應的主機(年代)的價值辛巴火花ODBC Driver DSN設置磚集群的對話框。
運行
pyodbc-test-cluster.py
文件與您的Python解釋器。的前兩行顯示數據庫表。
通過使用一個SQL查詢倉庫:
創建一個文件命名
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():打印(行)
運行代碼,加快啟動對應的SQL倉庫主機(年代)的價值辛巴火花ODBC Driver DSN設置對話框中為你的磚SQL的倉庫。
運行
pyodbc-test-warehouse.py
文件與您的Python解釋器。的前兩行顯示數據庫表。
故障排除
當使用這一節將介紹一些常見的問題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
。
解決方案:升級你的安裝pyodbc
4.0.32版或以上。
一般故障排除
看到問題在mkleehammer / pyodbc在GitHub庫。