当前位置: 首页 > 面试题库 >

使用Teradata模块将Python与Teradata连接

管翼
2023-03-14
问题内容

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

pip install Teradata

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

  1. 向Teradata触发查询并获取结果集。
  2. 检查是否已连接到Teradata。

请帮我编写与我刚接触Python相同的代码,并且没有可用的信息连接到Teradata。


问题答案:

有多种方法可以连接到Teradata并将表导出到Pandas。这是四个+:

使用Teradata模块

# 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驱动程序(此软件包除外)。

# 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模块

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)

使用sqlalchemy模块

 #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 CLIv2和TPT API标头/ lib文件)。

注意:已于2018年7月13日更新,使用上下文管理器确保会话关闭

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

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

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的块,以避免出现“ [HY001] [Teradata] [ODBC
Teradata驱动程序]内存分配错误”错误:例如

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)


 类似资料:
  • 代码如下 有人能帮忙吗,是不是在我可以把信息上传到表中之前就关闭连接了?

  • 背景 Teradata 在数据管理和数据分析领域有超过 40 年的历史,特别针对金融客户 Teradata 有独到的优势,特别是在金融领域的业务分析,基于利润领域建模等,Teradata 的前身是 CityBank 的高级技术实验室(Advanced Technology Group),Teradata 公司成立于 1979 年,目前公司增长的 3 大支柱:业务分析、(云)产品、咨询服务,2019

  • NCR的数据库Teradata官方JDBC驱动 驱动类名:com.ncr.teradata.TeraDriver 连接URL:jdbc:teradata//GatewayServerName:PortNumber/DatabaseServerName/Param1,Param2,...

  • 问题内容: 在Oracle中,我们可以使用语句将其编写为生成单行。 什么是Teradata等效产品? 问题答案: 通常,不需要这样的表 在大多数情况下,Teradata数据库中实际上不需要任何表。以下是有效的SQL(就像在H2,PostgreSQL,Redshift,SQL Server,SQLite,Sybase ASE,Sybase SQL Anywhere,Vertica中一样) 例外情况

  • 问题内容: 有人可以解释一下我在Teradata中得到的以下结果: 结果是: 我期待DECIMAL(18,4) 问题答案: 每个DBMS在涉及小数的计算方面都有其自己的规则。 Teradata的基本规则是:当您将DECIMALs相加/相减/相除时,所得的分数精度是两个操作数中较大的一个,例如dec(10,2)+ dec(10,4)= dec(xx,4) 但是,当您乘以小数位时,例如,decdec(

  • 我配置了这个JNDI。但我有下一个例外。我无法设置DSName属性 前任是: @亚历克斯莫特利 谢谢。