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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章