Linux系統中Python直連Teradata

最近調研在Linux下嘗試Python直連Teradata,在同事的大力幫助下,終於走通,簡單做個筆記。

目標:在Linux系統下通過pyodbc連接Teradata。

step1: 安裝Teradata Tools and Utilities For Linux

在官網https://downloads.dr.teradata.com/download/tools/teradata-tools-and-utilities-linux-installation-package-0下載安裝包,註冊Teradata需要翻牆,此外操作系統是ubuntu需要下載對應的版本。

如果是ubuntu,還需要安裝gcc、lib32stdc++6等

apt-get install libc6-i386
apt-get install lib32gcc1
apt-get install lib32stdc++6

將下載的TeradataToolsAndUtilitiesBase__ubuntu_indep.16.10.27.00.tar.gz解壓,使用root權限執行setup.bat腳本,選擇安裝Teradata ODBC Driver

tar -xzvf TeradataToolsAndUtilitiesBase__ubuntu_indep.16.10.27.00.tar.gz
cd TeradataToolsAndUtilitiesBase
bash setup.bat

step2: 安裝PyODBC

離線下載pyodbc的安裝包並解壓

pip download -d py-deps pyodbc
tar -xzvf pyodbc-4.0.30.tar.gz

修改setup.py中128行,['-L/opt/teradta/client/16.10/lib64']


210行,
settings['extra_compile_args'].extend(['-Wno-write-strings','-I/opt/teradata/client/16.10/include','-DSQL_CP_ONE_PER_HENV=2'])


修改完後執行

python setup.py build
python setup.py install

step3: 修改配置文件

安裝完後, cp odbc.ini到當前用戶目錄下

cp /opt/teradata/client/16.10/odbc_64/odbc.ini ~
mv odbc.ini .odbc.ini

修改odbc.ini中的DBCName成TD的IP,testdsn是默認的DSN

[ODBC]
InstallDir=/opt/teradata/client/16.10/odbc_64
Trace=0
TraceDll=/opt/teradata/client/16.10/odbc_64/lib/odbctrac.so
TraceFile=/usr/joe/odbcusr/trace.log
TraceAutoStop=0

[ODBC Data Sources]
testdsn=tdata.so

[testdsn]
Driver=/opt/teradata/client/16.10/odbc_64/lib/tdata.so
Description=Teradata database
DBCName=xx.xx.xx.xx # Teradata的IP
LastUser=
Username=
Password=
Database=
DefaultDatabase=

在.profile中新增環境變量ODBC_INI,並source

export ODBC_INI=~/.odbc.ini

step4: 測試腳本

import pyodbc
pyodbc.pooling = FALSE

conn = pyodbc.connect("DSN={0}; UID={1}; PWD={2}; QUIETMODE=YES;".format("testdsn", "username", "password"))
conn.autocommit = True
cur = conn.cursor()
query = "select * from table"
cur.execute(query)
data = cur.fetchone()
print(data)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章