Teradata - Pandas TypeError: 'NoneType' object is not iterable

Teradata - Pandas TypeError: 'NoneType' object is not iterable

我正在尝试 运行 使用 teradata python 库创建 Teradata table 以下代码:

import teradata
import pandas as pd

udaExec = teradata.UdaExec (appName="Hello", version="1.0",
    logConsole=False)
session = udaExec.connect(method="odbc", system="tdprod",
    username="xxx", password="xxx");

sqlStr = "CREATE SET TABLE \"TEST123\" \
(col1 INTEGER) PRIMARY INDEX (col1);"

result = pd.read_sql(sqlStr, self.session)

我收到以下错误:

File "..\pandas\io\sql.py", line 1436, in read_query
columns = [col_desc[0] for col_desc in cursor.description]

TypeError: 'NoneType' object is not iterable

知道如何解决这个问题吗?

您的 SQL (sqlStr) 是一个 DDL (CREATE Table) -> 它不会传送任何可以放入 Pandas 数据框的结果集 (pd.read_sql).

如果您只想创建 table,则不需要 pandas:

session.execute(sqlStr);

如果你想从 table "TEST123" 中读取:

sqlStr = "SELECT col1 FROM Test123;";
result = pd.read_sql(sqlStr, self.session);

或者:

result = pd.read_sql_table("Test123", self.session);

为了补充 hhoeck 的答案,使用上下文管理器是一个很好的做法。否则您将面临未关闭会话的风险。

import teradata
import pandas as pd

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

with udaExec.connect(method="odbc", system="tdprod",
                      username="xxx", password="xxx") as session:

    sqlStr = "CREATE SET TABLE \"TEST123\" \
             (col1 INTEGER) PRIMARY INDEX (col1);"
    # Create Table
    session.execute(sqlStr)

    # Read table to result

    result = pd.read_sql(sqlStr,session)