在pandas中,NoneType对象不是可迭代的错误

时间:2015-05-29 16:02:01

标签: python sql-server pandas

我正在尝试使用python从sql server上的存储过程中提取一些数据。

这是我的代码:

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 个答案:

答案 0 :(得分:9)

您的需求

SET NOCOUNT ON;

如果没有此sql,则会返回rowcount来进行调用,该调用将在没有列名的情况下返回,从而导致NoneType错误。

答案 1 :(得分:1)

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'")

您将不会收到任何输出,但由于没有预期,因此您的代码应无误运行。

答案 2 :(得分:0)

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 = **')
sqlSend = conn.cursor()
sqlSend.execute(f"EXEC ******** '20140528'")
conn.commint()