1.安装Python

Python下载地址:Python-3.6.8.tar.xz

(1)前置安装包查看

rpm -qa |grep -i zlib
rpm -qa |grep -i bzip2
rpm -qa |grep -i ncurses
rpm -qa |grep -i readline
rpm -qa |grep -i openssl
rpm -qa |grep -i xz
rpm -qa |grep -i sqlite
rpm -qa |grep -i gdbm
rpm -qa |grep -i tk
rpm -qa |grep -i gcc #非常重要,而且单独安装非常麻烦需要1-2h

(2)安装Python

将安装软件上传到/software目录,执行如下语句安装

mkdir -p /usr/local/python3
cd /software
xz -d Python-3.6..tar.xz
tar -xvf Python-3.6..tar
cd Python-3.6.
./configure --prefix=/usr/local/python3
make
make install

(3)更新默认Python为新版本

ln -s /usr/local/python3/bin/python3. /usr/bin/python3
ln -s /usr/local/python3/bin/pip3. /usr/bin/pip3 mv /usr/bin/python /usr/bin/python_bak_2.6.9
mv /usr/bin/pip /usr/bin/pip_bak_2.6.9 ln -s /usr/local/python3/bin/python3. /usr/bin/python
ln -s /usr/local/python3/bin/pip3. /usr/bin/pip

(4)验证安装

pip --version
python -v

2.使用ODBC+pyodbc连接TD数据库

TeraGSS和tdicu(ODBC依赖包在TTU中):TeradataToolsAndUtilitiesBase__linux_indep.16.20.10.00.tar

Teradata ODBC驱动下载地址:tdodbc1620__linux_indep.16.20.00.65-1.tar          其它版本下载地址: Windows   AIX

2.1检查是否安装TeraGSS和tdicu

rpm -qa | grep -i GSS
rpm -qa | grep -i tdicu

如果没有安装,则使用TTU安装上述组件(TeradataToolsAndUtilitiesBase__linux_indep.16.20.10.00.tar)。

特别说明:

除使用上述16版本TTU安装方式外,也可以使用15版本的ODBC驱动包中含有的TERAGSS和tdicu独立安装包进行安装(16版本ODBC驱动包不含独立安装包)。15版本的ODBC驱动下载地址为tdodbc__linux_indep.15.00.00.08-1.tar.gz

使用rpm -ivh 安装相应的rpm包即可。

rpm -ivh TeraGSS_linux_x64-15.00.06.05-.noarch.rpm
rpm -ivh tdicu-15.00.00.00-.noarch.rpm

2.2 安装Teradata的ODBC驱动

将安装软件tdodbc1620__linux_indep.16.20.00.65-1.tar上传到/software目录,执行如下语句安装(如果odbc已经安装完毕则跳过如下安装步骤,或者卸载当前版本后安装新版本)

rpm -qa | grep -i odbc  #验证是否安装tdodbc

cd /software
tar -xvf tdodbc1620__linux_indep.16.20.00.65-.tar
cd tdodbc1620/
rpm -ivh tdodbc1620-16.20.00.65-.noarch.rpm --nodeps
rpm -qa | grep -i tdodbc
tdodbc-16.20.00.65- rpm -e tdodbc-16.20.00.65- #卸载tdodbc

ODBC安装完毕后,会在teradata安装目录/opt/teradata/client/16.20下出现两个目录odbc_32和odbc_64,分别为32位和64位驱动。

64位驱动路径(每个版本不同可查看odbc.ini中Driver):/opt/teradata/client/16.20/odbc_64/lib/tdataodbc_sb64.so
32位驱动路径(每个版本不同可查看odbc.ini中Driver):/opt/teradata/client/16.20/odbc_32/lib/tdataodbc_sb32.so 64位odbc.ini模板位置:/opt/teradata/client/16.20/odbc_64/odbc.ini
64位odbcinst.ini模板位置: /opt/teradata/client/16.20/odbc_64/odbcinst.ini 32位odbc.ini模板位置:/opt/teradata/client/16.20/odbc_32/odbc.ini
32位odbcinst.ini模板位置: /opt/teradata/client/16.20/odbc_32/odbcinst.ini

2.3 安装pyodbc

Python连接ODBC模块下载地址:pyodbc-4.0.26.tar.gz    其它版本下载地址:pyodbc 4.0.26

(1)将安装软件上传到/software目录,执行如下语句安装

cd /software
tar -zxvf pyodbc-4.0..tar.gz
cd pyodbc-4.0.

(2)编辑安装配置

vi setup.py
# Other posix-like: Linux, Solaris, etc.
# Python functions take a lot of 'char *' that really should be const. gcc complains about this *a lot*
settings['extra_compile_args'].append('-Wno-write-strings') 改变为(红色字体16.,根据odbc的版本不同而有所改动)(尽量在原有基础上去改动,不要两行一起复制粘贴,否则会报格式问题,注意Python是使用tab键控制层次) # Other posix-like: Linux, Solaris, etc.
# Python functions take a lot of 'char *' that really should be const. gcc complains about this *a lot*
settings['extra_compile_args']=['-Wno-write-strings','-I/opt/teradata/client/16.20/odbc_64/include','-DSQL_CP_ONE_PER_HENV=2']
settings['extra_link_args']=['-L/opt/teradata/client/16.20/odbc_64/lib']

(3)安装pyodbc

python setup.py build
python setup.py install

(4)验证安装

#查看如下目录中有pyodbc目录则安装成功
[root@localhost] ll /usr/local/python3/lib/python3.6/site-packages
[root@localhost]$ python
>>> import pyodbc
>>> pyodbc.apilevel
'2.0'

 2.4 配置ODBC并使用pyodbc连接数据库

2.4.1 直接使用DRIVER的连接方式(不使用DSN,仅配置odbcinst.ini文件即可,无需配置odbc.ini)

connection=pyodbc.connect('DRIVER={Teradata Database ODBC Driver 16.20};DBCNAME=192.168.253.131;UID=dbc;PWD=dbc;QUIETMODE=YES;')

配置步骤如下:

(1)查看并拷贝odbcinst.ini模板到当前用户根目录,并改名称为隐藏文件.odbcinst.ini

updatedb             #创建或更新slocate命令所必需的数据库文件,执行时间可能会很长
locate odbcinst.ini #查看odbcinst模板位置
cp /opt/teradata/client/16.20/odbc_64/odbcinst.ini ~/.odbcinst.ini

(2)odbcinst.ini配置样例

如下ODBC注册配置文件odbcinst.ini中可以看到,可以使用的Driver名称为Teradata Database ODBC Driver 16.20(可以根据实际情况自行改动此名称,连接数据库时DRIVER同步更改即可)。

[ODBC Drivers]
Teradata Database ODBC Driver 16.20=Installed [Teradata Database ODBC Driver 16.20]
Description=Teradata Database ODBC Driver 16.20
Driver=/opt/teradata/client/16.20/odbc_64/lib/tdataodbc_sb64.so
# Note: Currently, Data Direct Driver Manager does not support Connection Pooling feature.
CPTimeout=60

(3)连接数据库样例(test_pyodbc.py)

# import pyodbc module
import pyodbc # disable connection pooling
pyodbc.pooling = False # create connection
connection=pyodbc.connect('DRIVER={Teradata Database ODBC Driver 16.20};DBCNAME=192.168.253.131;UID=dbc;PWD=dbc;QUIETMODE=YES;') # enable auto commit
connection.autocommit = True; # python 3.x connect Teradata set charset(如果不设置此字符集,数据库连接无问题,但是执行SQL会无法执行)
connection.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
connection.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
#connection.setdecoding(pyodbc.SQL_WMETADATA, encoding='utf-32le')
connection.setencoding(encoding='utf-8') # print driver and database info
print ('-ODBC version =',connection.getinfo(10))
print ('-DBMS name =',connection.getinfo(17))
print ('-DBMS version =',connection.getinfo(18))
print ('-Driver name =',connection.getinfo(6))
print ('-Driver version =',connection.getinfo(7))
print ('-Driver ODBC version =',connection.getinfo(77)) #disconnect
connection.close()

(4)执行结果

2.4.2 使用DSN数据源配置的连接方式(仅配置odbc.ini文件即可,无需配置odbcinst.ini)

connection=pyodbc.connect('DSN=testdsn;UID=dbc;PWD=dbc;QUIETMODE=YES;')  #DSN中没有配置了连接数据库用户名和口令

connection=pyodbc.connect('DSN=testdsn;QUIETMODE=YES;') #DSN中配置了连接数据库用户名和口令

配置步骤如下:

(1)查看并拷贝odbc.ini模板到当前用户根目录,并改名称为隐藏文件.odbc.ini

updatedb          #创建或更新slocate命令所必需的数据库文件,执行时间可能会很长
locate odbc.ini #查看odbc模板位置
cp /opt/teradata/client/16.20/odbc_64/odbc.ini ~/.odbc.ini

(2)odbc.ini配置样例

如下ODBC的DSN文件odbc.ini中可以看到,可以使用的DSN名称为testdsn(可以根据实际情况自行改动此名称,连接数据库时DSN值同步更改即可)。

[ODBC]
# For Data Direct to load its error messages
# Data Direct Driver Manager looks for the messages here:
# "/opt/teradata/client/16.20/locale/xx_xx/LC_MESSAGES/"
InstallDir=/opt/teradata/client/16.20/odbc_64
Trace=
TraceDll=/opt/teradata/client/16.20/odbc_64/lib/odbctrac.so
TraceFile=/usr/joe/odbcusr/trace.log
TraceAutoStop= [ODBC Data Sources]
testdsn=tdata.so [testdsn]
# This key is not necessary and is only to give a description of the data source.
Description=Teradata Database ODBC Driver 16.20 # Driver: The location where the ODBC driver is installed to.
Driver=/opt/teradata/client/16.20/odbc_64/lib/tdataodbc_sb64.so # Required: These values can also be specified in the connection string.
DBCName=192.168.253.131
UID=
PWD=
CharacterSet=UTF8 # Optional
AccountString=
DatasourceDNSEntries=
DateTimeFormat=AAA
DefaultDatabase=
DontUseHelpDatabase=
DontUseTitles=
EnableExtendedStmtInfo=
EnableReadAhead=
IgnoreODBCSearchPattern=
LogErrorEvents=
LoginTimeout=
MaxRespSize=
MaxSingleLOBBytes=
MaxTotalLOBBytesPerRow=
MechanismName=
NoScan=
PrintOption=N
retryOnEINTR=
ReturnGeneratedKeys=N
SessionMode=System Default
SplOption=Y
TABLEQUALIFIER=
TCPNoDelay=
TdmstPortNumber=
UPTMode=Not set
USE2XAPPCUSTOMCATALOGMODE=
UseDataEncryption=
UseDateDataForTimeStampParams=
USEINTEGRATEDSECURITY=
UseSequentialRetrievalOnly=
UseXViews=
EnableUDFUpload=
UDFUploadPath=

(3)连接数据库样例(test_pyodbc_dsn.py)

# import pyodbc module
import pyodbc # disable connection pooling
pyodbc.pooling = False # create connection
#connection=pyodbc.connect('DSN=testdsn;UID=dbc;PWD=dbc;QUIETMODE=YES;') #DSN中未设定UID and PWD
connection=pyodbc.connect('DSN=testdsn;QUIETMODE=YES;') #DSN中设定了UID and PWD # enable auto commit
connection.autocommit = True; # python 3.x connect Teradata set charset(如果不设置此字符集,数据库连接无问题,但是执行SQL会无法执行)
connection.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
connection.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
#connection.setdecoding(pyodbc.SQL_WMETADATA, encoding='utf-32le')
connection.setencoding(encoding='utf-8') # print driver and database info
print ('-ODBC version =',connection.getinfo(10))
print ('-DBMS name =',connection.getinfo(17))
print ('-DBMS version =',connection.getinfo(18))
print ('-Driver name =',connection.getinfo(6))
print ('-Driver version =',connection.getinfo(7))
print ('-Driver ODBC version =',connection.getinfo(77)) #disconnect
connection.close()

(4)执行结果

 2.5 使用pyodbc执行SQL

2.5.1操作流程

获取连接对象==>创建游标==>执行SQL==>获取结果==>关闭游标==>关闭数据库连接

# import pyodbc module
import pyodbc # disable connection pooling
pyodbc.pooling = False # create connection
#connection=pyodbc.connect('DRIVER={Teradata Database ODBC Driver 16.20};DBCNAME=192.168.253.131;UID=dbc;PWD=dbc;QUIETMODE=YES;') #使用DRIVER方式连接
#connection=pyodbc.connect('DSN=testdsn;UID=dbc;PWD=dbc;QUIETMODE=YES;') #使用DSN方式连接,DSN中未设定UID and PWD
connection=pyodbc.connect('DSN=testdsn;QUIETMODE=YES;') #使用DSN方式连接,DSN中设定了UID and PWD # enable auto commit
connection.autocommit = True; # python 3.x connect Teradata set charset(如果不设置此字符集,数据库连接无问题,但是执行SQL会无法执行)
connection.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
connection.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
#connection.setdecoding(pyodbc.SQL_WMETADATA, encoding='utf-32le')
connection.setencoding(encoding='utf-8') # create cursor
cursor = connection.cursor() # fetch result
cursor.execute("select * from dbc.dbcinfov")
rows=cursor.fetchall()
for row in rows:
print(row) # close cursor
cursor.close() #disconnect
connection.close()

2.5.2常用操作函数

(1)连接对象

close()  关闭数据库连接

commit()  提交事务

rollback()  回滚事务

cursor()   获取游标对象,操作数据库,如执行DML操作,调用存储过程等

(2)游标对象

close() 关闭当前游标

execute("SQL") 执行数据库操作,SQL语句或者数据库命令,其中SQL为执行语句

fetchone()   获取查询结果集中下一条记录

fetchmany(n)  获取结果集指定数量n条记录

fetchall()    获取结果集所有记录

2.5.3 经典实例

在数据库testbase中,创建数据库表books,插入数据后,查询插入数据。

# import pyodbc module
import sys
import pyodbc print(sys.getdefaultencoding()) # disable connection pooling
pyodbc.pooling = False # create connection
#connection=pyodbc.connect('DRIVER={Teradata Database ODBC Driver 16.20};DBCNAME=192.168.253.131;UID=dbc;PWD=dbc;QUIETMODE=YES;') #使用DRIVER方式连接
#connection=pyodbc.connect('DSN=testdsn;UID=dbc;PWD=dbc;QUIETMODE=YES;') #使用DSN方式连接,DSN中未设定UID and PWD
connection=pyodbc.connect('DSN=testdsn;QUIETMODE=YES;') #使用DSN方式连接,DSN中设定了UID and PWD # enable auto commit
connection.autocommit = True; # python 3.x connect Teradata set charset(如果不设置此字符集,数据库连接无问题,但是执行SQL会无法执行)
connection.setdecoding(pyodbc.SQL_CHAR, encoding='utf-8')
connection.setdecoding(pyodbc.SQL_WCHAR, encoding='utf-8')
#connection.setdecoding(pyodbc.SQL_WMETADATA, encoding='utf-32le')
connection.setencoding(encoding='utf-8') # print driver and database info
print ('-ODBC version =',connection.getinfo(10))
print ('-DBMS name =',connection.getinfo(17))
print ('-DBMS version =',connection.getinfo(18))
print ('-Driver name =',connection.getinfo(6))
print ('-Driver version =',connection.getinfo(7))
print ('-Driver ODBC version =',connection.getinfo(77)) # create cursor
cursor = connection.cursor() # execute SQL statement (create table books)
cursor.execute("DROP TABLE testbase.books")
cursor.execute("CREATE MULTISET TABLE testbase.books (book_name VARCHAR(50) NOT NULL, category VARCHAR(50) NOT NULL, price INTEGER,publish_time date NOT NULL)") try:
#execute SQL, instert records
cursor.execute("insert into testbase.books(book_name,category,price,publish_time) values('Python3.6.8','Python','79.80','2018-05-20')")
# commit data
connection.commit()
except:
#rollback when error
connection.rollback()
print("insert error data rollback") cursor.execute("select book_name,category from testbase.books")
# fetch result set rows
for row in cursor:
print(row) # close cursor
cursor.close() #disconnect
connection.close()

3.使用ODBC+Teradata Python Module连接TD数据库(已停止更新,不建议使用)

teradata python模块包括两个子模块,它们实现了Python Database API规范v2.0,一个使用rest(teradata.tdrest),另一个使用odbc(teradata.tdbc)。尽管这些模块可直接被访问,但建议使用基本的UdaExec模块,因为它提供了所有额外的支持DevOps的功能。

(1)下载安装Teradata Python Module

下载地址:teradata-15.10.0.21.tar.gz  其它版本

将下载的安装包teradata-15.10.0.21.tar.gz拷贝到/software目录下。

#安装
cd /software
tar -zxvf teradata-15.10.0.21.tar.gz
cd teradata-15.10.0.21
setup.py install
#验证
ll /usr/local/python3/lib/python3.6/site-packages/
查看是否有teradata-15.10.0.21-py3.6.egg目录,有则说明安装成功。

(2)使用Teradata Python Module连接数据库

test_tdmodule.py脚本如下(需配置好odbcinst.ini,配置方法详见上文):

#!/usr/bin/python
# encoding=utf-8
import teradata
udaExec = teradata.UdaExec (appName="HelloWorld", version="1.0",logConsole=False)
session = udaExec.connect(method="odbc", system="192.168.253.131",username="dbc", password="dbc");
for row in session.execute("SEL * FROM DBC.dbcinfov"):
print(row)

执行结果如下:

参考文档(Python安装)

Python开发环境搭建

参考文档(pyodbc包连接Teradata数据库):

Python with Teradata ODBC()

linux下安装teradata odbc驱动

pyodbc Connecting to Teradata

python连接Teradata数据库

pyodbc访问数据库(python ODBC访问数据库)

参考文档(teradata包连接Teradata数据库):

linux下python连接Teradata

Teradata Python Module

【Python实战】使用Python连接Teradata数据库???未完成的更多相关文章

  1. Python教程:ORM连接Sqlite数据库,软件架构基础

    python语言因其语法简单易学习,且高效率应用广,近几年来发展迅猛,一度进入编程语言排行榜前六名.为了使程序员能更快的学习Python语言,所以写的此教程.也可以说是对自己学习的总结.但文章尽量会使 ...

  2. Python 使用PyMySql 库 连接MySql数据库时 查询中文遇到的乱码问题(实测可行) python 连接 MySql 中文乱码 pymysql库

    最近所写的代码中需要用到python去连接MySql数据库,因为是用PyQt5来构建的GUI,原本打算使用PyQt5中的数据库连接方法,后来虽然能够正确连接上发现还是不能提交修改内容,最后在qq交流群 ...

  3. python在windows下连接mysql数据库

    一,安装MySQL-python python 连接mysql数据库需要 Python interface to Mysql包,包名为 MySQL-python ,PyPI上现在到了1.2.5版本.M ...

  4. Python实战:Python爬虫学习教程,获取电影排行榜

    Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知识总结.希望大家能够快速入门并学习 ...

  5. Python安装MySQLdb并连接MySQL数据库

    当然了,前提是你已经安装了Python和MySQL.我的Python是2.6版本的. Python2.6的“Set”有点兼容性问题,自己照着改一下: http://sourceforge.net/fo ...

  6. python web开发-flask连接sqlite数据库

    在之前的文章中我们介绍了如何在centOS中安装sqlite数据库. Sqlite安装完成后,本节就用flask来连接和操作sqlite数据库. 1.       数据准备 先在sqlite3中创建一 ...

  7. Python - Django - 使用 Pycharm 连接 MySQL 数据库

    在 Pycharm 的右上方找到 Database 点击 依次点击,选择 MySQL 数据库 点击 Download 下载驱动文件 下载完成后对数据库的相关信息进行填写 填写完成后点击“Test Co ...

  8. python实战===用python对比两张图片的不同

    from PIL import Image from PIL import ImageChops def compare_images(path_one, path_two, diff_save_lo ...

  9. python实战===用python识别图片中的中文

    需要安装的模块 PIL pytesseract 需要下载的工具: http://download.csdn.net/download/bo_mask/10196285 因为之前百度云的链接总失效,所以 ...

随机推荐

  1. 程序员如何面试才能拿到offer

    一.概述 面试,难还是不难?取决于面试者的底蕴(气场+技能).心态和认知及沟通技巧.面试其实可以理解为一场聊天和谈判,在这过程中有心理.思想上的碰撞和博弈.其实你只需要搞清楚一个逻辑:“面试官为什么会 ...

  2. [置顶] xamarin android toolbar(踩坑完全入门详解)

    网上关于toolbar的教程有很多,很多新手,在使用toolbar的时候踩坑实在太多了,不好好总结一下,实在浪费.如果你想学习toolbar,你肯定会去去搜索androd toolbar,既然你能看到 ...

  3. Kafka~Linux环境下的部署

    概念 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素. 这些数据 ...

  4. Kafka控制器选举流程剖析

    1.概述 平时在使用Kafka的时候,可能关注的更多的是Kafka系统层面的.今天来给大家剖析一下Kafka的控制器,了解一下Kafka控制器的选举流程. 2.内容 Kafka控制器,其实就是一个Ka ...

  5. C++STL模板库序列容器之vector

    目录 STL之Vecter 一丶STL简介 二丶Vector用法 1.vector容器的使用 2.vector迭代器. 3.vector中的方法. 三丶常用算法 1.常见算法中的算法方法. 2.sor ...

  6. -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

     本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁  sleep()和wait()方法的区别 为什么wait( ...

  7. JVM(一)史上最佳入门指南

    提到Java虚拟机(JVM),可能大部分人的第一印象是"难",但当让我们真正走入"JVM世界"的时候,会发现其实问题并不像我们想象中的那么复杂.唯一真正令我们恐 ...

  8. C# 如何获取Url的host以及是否是http

    参考资料:https://sites.google.com/site/netcorenote/asp-net-core/get-scheme-url-host Example there's an g ...

  9. WPF 窗口大小自适应

    在设置桌面不同分辨率以及较大DPI下,窗口如何显示的问题. 方案一 设置窗口最大值和最小值显示 通过对比当前屏幕的可显示区域,将窗口高宽最大值和最小值,设置为窗口的实际高宽(此例中仅设置高度) 界面设 ...

  10. mysql 查询导出(txt,csv,xls)

    1 简介 工作中产品经常会临时找我导出一些数据,导出mysql查询结果数据有几种方法,下面介绍3种. ①  mysql -u  -p  -e "sql" db > filep ...