Python PyTd teradata查询到Pandas DataFrame

时间:2016-06-16 04:57:47

标签: python pandas teradata

我正在使用PyTd teradata模块查询Teradata中的数据,并希望将其读入Pandas DataFrame

import teradata
import pandas as pd

# teradata connection
udaExec = teradata.UdaExec(appName="Example", version="1.0",
                           logConsole=False)
session = udaExec.connect(method="odbc", system="", username="", password="")

# Create empty dataframe with column names
query = session.execute("SELECT TOP 1 * FROM table")
cols = [str(d[0]) for d in query.description]
df = pd.DataFrame(columns=cols)

# Read data into dataframe
for row in session.execute("SELECT * FROM table"):
    print type(row)
    df.append(row)

row属于teradata.util.Row class,无法附加到数据框。我尝试将其转换为列表,但格式搞砸了。

如何使用teradata模块从Teradata将数据读入数据框?我无法使用pyodbc模块。

有没有更好的方法来创建列名与数据库中的列名相匹配的空数据框?

3 个答案:

答案 0 :(得分:4)

您可以使用pandas.read_sql:)

import teradata
import pandas as pd

# teradata connection
udaExec = teradata.UdaExec(appName="Example", version="1.0",
                           logConsole=False)
with udaExec.connect(method="odbc", system="", username="", password="") as session:


    query ="SELECT * FROM table"

    df = pd.read_sql(query,session)

使用'with'将确保查询后关闭会话。我希望这有助于:)

答案 1 :(得分:0)

我知道它有点晚了。但不过要做一个说明。

这里有几个问题。

  

如何使用数据从Teradata将数据读入数据框   teradata模块?

在一天结束时,teradata.util.Row只是一个列表。所以一个简单的列表操作应该可以帮助你摆脱Row。

','.join(str(item) for item in row)

有点儿。

将其推入pandas数据框应该是df转换练习的列表。

  

我无法使用pyodbc模块。

我使用teradata的python模块进行LDAP身份验证。一切正常。没有这个要求。遗憾。

  

有没有更好的方法来创建列名与数据库中的列名相匹配的空数据框?

我假设,给定一个表名,你可以查询它的架构(表名)>>将其转换为列表并创建您的pandas df?

答案 2 :(得分:0)

我知道这已经很晚了。

您可以使用pandas模块中的read_sql()。它返回pandas数据帧。

以下是参考: http://pandas.pydata.org/pandas-docs/version/0.20/generated/pandas.read_sql.html