开发者问题收集

NoneType 对象在 Pandas 中不是可迭代错误

2015-05-29
22806

我正在尝试使用 python 从 SQL 服务器上的存储过程提取一些数据。

这是我的代码:

import datetime as dt
import pyodbc
import pandas as pd

conn = pyodbc.connect('Trusted_Connection=yes', driver = '{SQL Server Native client 11.0}',server = '*****, database = '**')

pd.read_sql("EXEC ******** '20140528'",conn)

我收到错误:TypeError:“NoneType”对象不可迭代

我怀疑这是因为我在 SQL 表中有一个值为 NULL 的单元格,但不确定这是否是我收到错误的真正原因。我使用相同的代码运行了许多 SQL 语句,没有任何错误。

这是回溯:

In[39]: pd.read_sql("EXEC [dbo].[] '20140528'",conn)
Traceback (most recent call last):
  File "C:*", line 3032, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-39-68fb1c956dd7>", line 1, in <module>
    pd.read_sql("EXEC [dbo].[] '20140528'",conn)
  File "C:*", line 467, in read_sql
    chunksize=chunksize
  File "c:***", line 1404, in read_query
    columns = [col_desc[0] for col_desc in cursor.description]
TypeError: 'NoneType' object is not iterable
3个回答

您的Sproc需要

275137959

没有此 sql 将返回呼叫的 RowCount ,这将返回没有列名,引起 nonepe 错误。

Corvus
2016-01-19

pd.read_sql() 期望有输出返回,并尝试遍历输出;这就是 TypeError 的来源。相反,使用游标对象执行:

import datetime as dt
import pyodbc
import pandas as pd

conn = pyodbc.connect('Trusted_Connection=yes', driver = '{SQL Server Native client 11.0}',server = '*****', database = '**')
cur = conn.cursor()
cur.execute("EXEC ******** '20140528'")

您不会收到任何输出,但由于没有预期输出,您的代码应该可以无错误地运行。

allydh
2018-04-04

发帖已经太晚了, 但我遇到了同样的错误,在 stack-overflow 上搜索了很多次后发现这不是 pandas/python 的问题而是查询/存储过程的问题

我的解决方法是调试 python 脚本并进入 pandas 的内置代码, 到达此路径 site-packages/pandas/io/sql.py ,在那里你会看到这段代码

cursor=self.execute(*args)

使用调试器执行此行并查看光标对象,你会发现存储过程返回了什么,在我的情况下,我从存储过程中触发了一条不相关的消息

Tomato Master
2022-05-18