Teradata - Pandas TypeError: объект 'NoneType' не повторяется - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь запустить следующий код для создания таблицы 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

Есть идеи, как это решить?

Ответы [ 2 ]

0 голосов
/ 11 июля 2018

Чтобы добавить ответ hhoeck, рекомендуется использовать Context Manager. В противном случае вы рискуете получить закрытые сессии.

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)
0 голосов
/ 27 июня 2018

Ваш SQL (sqlStr) является DDL (CREATE Table) -> он НЕ доставит никакого Resultset, который может быть помещен в кадр данных Pandas (pd.read_sql).

Если вы просто хотите создать таблицу, вам не нужны панды:

session.execute(sqlStr);

Если вы хотите прочитать из таблицы "TEST123":

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

или альтернативно:

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