首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Teradata模块连接Python和Teradata

使用Teradata模块连接Python和Teradata
EN

Stack Overflow用户
提问于 2016-03-11 10:52:11
回答 3查看 103.2K关注 0票数 24

我已经在Windows 7上安装了python2.7.0和Teradata模块,我无法从python连接和查询TD。

pip install Teradata

现在,我想在我的源代码中导入teradata模块,并执行如下操作-

  1. 将查询发送到teradata并获取结果集。
  2. 检查是否建立了与teradata的连接。

请帮助我编写同样的代码,因为我是Python新手,而且我没有任何信息可以连接到teradata。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-10-03 06:59:27

有许多方法可以连接到Teradata并将表导出到Pandas。以下是four+:

使用teradata模块

代码语言:javascript
复制
# You can install teradata via PIP: pip install teradata
# to get a list of your odbc drivers names, you could do: teradata.tdodbc.drivers
# You don’t need to install teradata odbc driver if using method='rest'.     
# See sending data from df to teradata for connection example 

import teradata
import pandas as pd

host,username,password = 'HOST','UID', 'PWD'
#Make a connection
udaExec = teradata.UdaExec (appName="test", version="1.0", logConsole=False)


with udaExec.connect(method="odbc",system=host, username=username,
                            password=password, driver="DRIVERNAME") as connect:

    query = "SELECT * FROM DATABASEX.TABLENAMEX;"

    #Reading query to df
    df = pd.read_sql(query,connect)
    # do something with df,e.g.
    print(df.head()) #to see the first 5 rows

使用TeradataSQL

from @ymzkala :这个包不需要您安装Teradata驱动程序(这个包除外)。

代码语言:javascript
复制
# Installing python -m pip install teradatasql

import teradatasql

with teradatasql.connect(host='host', user='username', password='password') as connect:
    df = pd.read_sql(query, connect)

使用pyodbc模块

代码语言:javascript
复制
import pyodbc

 #You can install teradata via PIP: pip install pyodbc
 #to get a list of your odbc drivers names, you could do: pyodbc.drivers()

#Make a connection
link = 'DRIVER={DRIVERNAME};DBCNAME={hostname};UID={uid};PWD={pwd}'.format(
                      DRIVERNAME=DRIVERNAME,hostname=hostname,  
                      uid=username, pwd=password)
with pyodbc.connect(link,autocommit=True) as connect:

    #Reading query to df
    df = pd.read_sql(query,connect)

使用方炼金术模块

代码语言:javascript
复制
 #You can install sqlalchemy via PIP: pip install sqlalchemy-teradata
 #Note: It is not pip install sqlalchemy. If you already have sqlalchemy, you still need sqlalchemy-teradata to get teradata dialects

from sqlalchemy import create_engine

#Make a connection

link = 'teradata://{username}:{password}@{hostname}/?driver={DRIVERNAME}'.format(
               username=username,hostname=hostname,DRIVERNAME=DRIVERNAME)

with create_engine(link) as connect:

    #Reading query to df
    df = pd.read_sql(query,connect)

还有第五种方法,使用giraffez模。我喜欢使用这个模块,因为它附带了MLOAD、FASTLOAD、BULKEXPORT等。对于初学者来说,唯一的问题是它的需求(例如C/C++编译器、Teradata头/库文件)。

注:更新13-07-2018年,使用上下文管理器确保会议闭幕

更新: 31-10-2018:使用teradata将数据从df发送到teradata

我们可以将数据从df发送到Teradata。避免“odbc”1MB限制和odbc驱动程序依赖,我们可以使用'rest‘方法。我们需要主机ip_address,而不是驱动程序参数。NB: df中列的顺序应该与Teradata中列的顺序相匹配。

代码语言:javascript
复制
import teradata
import pandas as pd

# HOST_IP can be found by executing *>>nslookup viewpoint* or *ping  viewpoint* 
udaExec = teradata.UdaExec (appName="test", version="1.0", logConsole=False) 
with udaExec.connect(method="rest",system="DBName", username="UserName",
                      password="Password", host="HOST_IP_ADDRESS") as connect:

    data = [tuple(x) for x in df.to_records(index=False)]

    connect.executemany("INSERT INTO DATABASE.TABLEWITH5COL values(?,?,?,?,?)",data,batch=True)

使用'odbc',您必须将数据块块小于1MB,以避免"HY001ODBC分配错误“错误:例如。

代码语言:javascript
复制
import teradata
import pandas as pd
import numpy as np

udaExec = teradata.UdaExec (appName="test", version="1.0", logConsole=False)

with udaExec.connect(method="odbc",system="DBName", username="UserName",
                      password="Password", driver="DriverName") as connect:

    #We can divide our huge_df to small chuncks. E.g. 100 churchs
    chunks_df = np.array_split(huge_df, 100)

    #Import chuncks to Teradata
    for i,_ in enumerate(chunks_df):

        data = [tuple(x) for x in chuncks_df[i].to_records(index=False)]
        connect.executemany("INSERT INTO DATABASE.TABLEWITH5COL values(?,?,?,?,?)",data,batch=True)
票数 42
EN

Stack Overflow用户

发布于 2019-10-07 01:51:13

要添加到普拉森氏答案,可以使用teradatasql包(发现在pypi上)。此包不要求您安装Teradata驱动程序(此包除外)。用它就像这样:

代码语言:javascript
复制
import teradatasql
import pandas as pd

with teradatasql.connect(host='host', user='username', password='password') as connect:
    data = pd.read_sql('select top 5 * from table_name;', connect)
票数 11
EN

Stack Overflow用户

发布于 2016-06-05 09:33:48

从互联网上下载Teradata模块和Python pyodbc.pyd。使用cmd安装setup.py。

下面是连接到teradata并提取数据的示例脚本:

代码语言:javascript
复制
import teradata
import pyodbc
import sys



udaExec = teradata.UdaExec (appName="HelloWorld", version="1.0",
        logConsole=False)

session = udaExec.connect(method="odbc", dsn="prod32",
        username="PRODRUN", password="PRODRUN");

i = 0
REJECTED = 'R';

f = file("output.txt","w");sys.stdout=f

cursor =  session.cursor();

ff_remaining = 0;

cnt = cursor.execute("SELECT  SEQ_NO,FRQFBKDC,PNR_RELOC FROM ttemp.ffremaining ORDER BY 1,2,3 ").rowcount;
rows = cursor.execute("SELECT  SEQ_NO,FRQFBKDC,PNR_RELOC FROM ttemp.ffremaining ORDER BY 1,2,3 ").fetchall();


for i in range(cnt):
    ff_remaining = cursor.execute("select count(*) as coun from  ttemp.ffretroq_paxoff where seq_no=? and status <> ?",(rows[i].seq_no,REJECTED)).fetchall();
    print ff_remaining[0].coun, rows[i].seq_no, REJECTED;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35938320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档