【问题标题】:Teradata - Pandas TypeError: 'NoneType' object is not iterableTeradata - Pandas TypeError:“NoneType”对象不可迭代
【发布时间】:2018-12-05 16:45:07
【问题描述】:

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

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

关于如何解决这个问题的任何想法?

【问题讨论】:

  • 这是完整的回溯还是之前有行?如果有更多行,请包括它们。
  • 我收到OSError: libodbc.so: cannot open shared object file: No such file or directory。您的示例中缺少一些依赖性。还有什么要安装的吗?

标签: python pandas teradata


【解决方案1】:

您的 SQL (sqlStr) 是一个 DDL (CREATE Table) -> 它不会提供任何可以放入 Pandas Dataframe (pd.read_sql) 的结果集。

如果你只想创建表,你不需要pandas:

session.execute(sqlStr);

如果要从表“TEST123”中读取:

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

或者:

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

【讨论】:

  • 你是对的。现在它起作用了!感谢您的回答!
【解决方案2】:

要添加 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)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-11-04
  • 2012-08-25
  • 1970-01-01
  • 2020-01-11
  • 2017-08-29
相关资源
最近更新 更多