最近调研在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
1616593951720.jpg
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']
image.png
210行,
settings['extra_compile_args'].extend(['-Wno-write-strings','-I/opt/teradata/client/16.10/include','-DSQL_CP_ONE_PER_HENV=2'])
image.png
修改完后执行
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)
网友评论