迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python Teradata 连接

作者:迹忆客 最近更新:2023/06/27 浏览次数:

这篇 Python 文章将展示如何使用 Python 连接到 Teradata。 连接到 Teradata 并将表导出到 Pandas 的选项有很多。

本文将讨论一些基本的正确准则,并在讨论连接方式之前了解 Teradata 模块的工作原理。


Python 中的 Teradata 数据库

您可以使用 Python 和 Teradata 模块编写与 Teradata 数据库的强大交互脚本。

采用 udaSQL 理念提供了一个面向 DevOps 的 SQL 引擎,开发人员可以在其中专注于 SQL 逻辑,而不是执行外部配置、查询分段和日志记录。

我们可以在 MIT 许可证下下载 Teradata 模块。 下一步是从 PyPI 安装并下载包。

由于其开源性质,该模块受到社区的支持。 但是,客户和工程师无法获得该模块与第三方应用程序(例如 Teradata 的 ODBC 驱动程序和 sqlalchemy-Teradata)的互操作性支持。


使用 PyODBC 库在 Python 中连接到 Teradata

Pandas 数据框可以使用 SQL 创建,并使用 Teradata 数据框上传到 Teradata。

  1. Python 中安装了 Pandas 的环境。
  2. Teradata 数据库的主机名/IP 地址和连接方法已知。
  3. 您尝试连接到 Teradata 的计算机上必须安装 ODBC 驱动程序。

或者,如果您不确定 Teradata 的数据库详细信息,您可以联系公司的 DBA。 如果没有 Teradata ODBC 驱动程序,您可能需要使用 JDBC 和 PySpark。

在本篇文章中,我们还将讨论其他方法。


使用 PyODBC 库

借助 PyODBC,您可以使用 Python 轻松连接到 ODBC 数据库。 此外,该库还实现了 DB API 2.0 规范,并具有更多 Python 特性。

在您的 Python 环境中,您应该安装 PyODBC 库。 然后,您可以使用 Conda 或 Pip 安装该库。

pip install pyodbc

或者

conda install pyodbc

名为 pip 的 Python 包用于安装包、库和模块。 例如,在 pip 安装 PyODBC 模块和 Teradata 的 ODBC 驱动程序后,运行以下 Python 代码以列出现有驱动程序。

通过注意 Teradata 驱动程序的名称来验证 Teradata 是否出现在此列表中。

pyodbc.drivers()

python teradata 连接 - pyodbc

以下代码栅栏显示了如何将 SQL 中的数据提取到 Pandas 数据框中。 但是,首先,检查下一个输出数据帧。

teradata_df.head()

Python 的 df.head() 始终返回 5 行以上的第一行。 因此,在这里,它将显示 Teradata 默认表中从 0-4 的前五行。

python teradata 连接 - df_head

teradata_df.info()

python teradata 连接 - teradataInfo

连接字符串中有很多相关信息,例如主机名、驱动程序、用户名、密码和身份验证协议。

您可能需要传递可选参数,具体取决于您的 Teradata 设置。 与 ODBC 兼容的参数可以传递给 PyODBC。

拉取数据的过程很简单,但是上传数据的过程就比较复杂了。

  1. Pandas 数据框架需要转换为模式。
  2. 我们应该将数据帧分成块。 ODBC 数据库每次插入的最大大小为 1MB,因此如果数据帧很大,则会失败。
  3. 我们应该按顺序插入记录。

您可以按照以下代码上传数据框。

cnxn.commit()
print('Query complete. Running time is %s sec/s.'%(round(end_time-start_time)))

cnxn.commit() 命令将提交更改并使它们永久化。


在 Python 中使用 Teradata SQL 连接到 Teradata

要使用此软件包,您无需安装 Teradata 驱动程序(除此驱动程序外)。

import teradatasql

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

导入 terasql 后,Teradata 将使用以下参数主机、用户名和密码进行连接。 然后在成功连接后,将读取并执行查询。

另一种方法是使用 Giraffez 模块。 该模块具有许多有用的功能,例如 MLOAD、FASTLOAD、BULKEXPORT 等。但是,对于初学者来说只有很少的要求(例如 C/C++ 编译器、Teradata CLIv2 和 TPT API 头文件/lib 文件)。

请注意,上下文管理器已更新,以确保会话自 2018 年 7 月 13 日起关闭。 DF 可用于将数据发送到 Teradata。

使用rest方法,我们可以消除odbc施加的1MB限制以及对odbc驱动程序的依赖。 我们应该使用主机 IP 地址来代替驱动程序参数。

import teradata
import pandas as pd

udaExec = teradata.UdaExec (appName="webApp", version="1.0", logConsole=False) 
with udaExec.connect(method="rest_one",system="DB_Name", username="user_name",
                      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)

为了避免 HY001[ODBC Teradata Driver] 内存分配错误,请在使用 ODBC Teradata 驱动程序时将数据分成小于 1MB 的块。 例如:

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="User_Name",
                      password="*******", driver="Driver_Name") as connect:
    chunks_df = np.array_split(huge_df, 100)
     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 v

以下是将 Teradata 与 Python 连接的另一种简单方法。


使用 Teradata 模块在 Python 中连接到 Teradata

如果已经安装了pip,执行以下命令可以直接安装该模块:

pip install Teradata

如果您还没有该软件包,可以通过以下 URL 下载该软件包:https://pypi.python.org/pypi/teradata。

下载 teradata 包后,将其解压缩,然后使用命令提示符导航到包含 setup.py 的目录,然后执行以下命令进行安装:

python setup.py install

示例代码:

import teradata
import sys

udaExec = teradata.UdaExec(
appName="HelloPeople", version="1.0", logConsole=False)
session = udaExec.connect(method="odbc", dsn="td16vm",
username="", password="", autocommit=True,
transactionMode="Teradata")

for row in session.execute('select getqueryband();'):
    print(row)
for row in session.execute('select top 20 tablename, tablekind from dbc.tables;'):
    print(row)

session.close()
input('Type <Enter> to exit...')

要连接到Teradata,我们必须配置这些参数:事务模式是Teradata; 连接方式为ODBC(另一种为REST),DSN为td16vm,在电脑中配置如下参数。

在下一步中,您需要为 Teradata 创建虚拟机。 以上示例代码的运行结果如下:

python teradata 连接 - 连接 teradata

正如所讨论的,存在多种将 Teradata 连接到 Python 的方法。 通过分步指导,这里揭示了在 Python 中连接 Teradata 模块的所有可能方法。

上一篇:在 Python 中查找素因数

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Python 中查找素因数

发布时间:2023/06/27 浏览次数:175 分类:Python

本篇文章将介绍如何在 Python 中执行素因数分解。质因数分解概述 在数学中,数字的因子是那些可以除以给定数字且余数为零的数字。

在 Python 中从 URL 中提取域

发布时间:2023/06/27 浏览次数:86 分类:Python

本文将通过实际例子来讲解Python的 urlparse() 函数从URL中解析并提取域名。 我们还将讨论提高解析 URL 和使用其不同组件的能力。使用 urlparse() 从 URL 中提取域

Python 中的省略号对象

发布时间:2023/06/27 浏览次数:158 分类:Python

本篇文章将介绍 Python 中省略号对象的使用。使用省略号作为未编写代码的占位符 省略号对象可以以不同的方式使用。 它主要充当未编写代码的占位符。

实现 Python Builder 模式的不同方法

发布时间:2023/06/27 浏览次数:70 分类:Python

构建器模式是一种允许对象的创建与其表示分离的模式。 这种模式可以创建和配置复杂的对象而无需继承,这是一种强大但不灵活的方法。

Python 中的互相关

发布时间:2023/06/27 浏览次数:81 分类:Python

互相关是一种重要的信号处理方法,用于分析具有不同滞后的两个信号之间的相似性。 您不仅可以了解两个信号的匹配程度,还可以获得它们最相似的时间点或索引。本文将讨论在 Python 中处理

使用 Python Timedelta 月份计算日期

发布时间:2023/06/27 浏览次数:128 分类:Python

在本篇文章中,我们将通过 timedelta 学习如何在 Python 中使用日期时间。 我们将了解如何计算当前日期或任何其他日期六个月后的日期。

Python MRO(方法解析顺序)

发布时间:2023/06/27 浏览次数:182 分类:Python

多重继承意味着单个子类可以继承多个类,并且子类将被授权访问属性和函数,除非它们不是该特定类的私有属性和函数。 MRO 技术用于搜索正在执行的类的顺序。在这篇文章中,我们将学习

Python 获取主目录

发布时间:2023/06/27 浏览次数:146 分类:Python

本篇文章将介绍使用 Python 中的 os.path.expanduser 或 pathlib 库获取主目录的路径。使用 Python 中的 os.path.expanduser 模块获取主目录

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便