Python Teradata 连接
这篇 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。
- Python 中安装了 Pandas 的环境。
- Teradata 数据库的主机名/IP 地址和连接方法已知。
- 您尝试连接到 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()
以下代码栅栏显示了如何将 SQL 中的数据提取到 Pandas 数据框中。 但是,首先,检查下一个输出数据帧。
teradata_df.head()
Python 的 df.head()
始终返回 5 行以上的第一行。 因此,在这里,它将显示 Teradata 默认表中从 0-4 的前五行。
teradata_df.info()
连接字符串中有很多相关信息,例如主机名、驱动程序、用户名、密码和身份验证协议。
您可能需要传递可选参数,具体取决于您的 Teradata 设置。 与 ODBC 兼容的参数可以传递给 PyODBC。
拉取数据的过程很简单,但是上传数据的过程就比较复杂了。
- Pandas 数据框架需要转换为模式。
- 我们应该将数据帧分成块。 ODBC 数据库每次插入的最大大小为 1MB,因此如果数据帧很大,则会失败。
- 我们应该按顺序插入记录。
您可以按照以下代码上传数据框。
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 创建虚拟机。 以上示例代码的运行结果如下:
正如所讨论的,存在多种将 Teradata 连接到 Python 的方法。 通过分步指导,这里揭示了在 Python 中连接 Teradata 模块的所有可能方法。
相关文章
在 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 模块获取主目录
Python - 尾部日志文件并比较阻塞和非阻塞尾部函数
发布时间:2023/06/26 浏览次数:176 分类:Python
-
本篇文章概述了 Python 中的 tail() 函数,介绍了它的工作原理并演示了如何尾部日志文件。它还比较了 Python 的阻塞和非阻塞尾部函数并强调了差异。Python tail() 函数概述