错误:read_sql时'NoneType'对象不可迭代

时间:2019-11-22 14:03:24

标签: python sql pandas

已经在互联网上寻找解决方案。

这是代码:

import pyodbc
import pandas as pd
conn = pyodbc.connect("Driver={SQL Server};"
                         "Server=Server;"
                         "Trusted_Connection=yes;")
cursor = conn.cursor()
query = """
SET
   nocount 
   ON;
USE database;
SELECT
   * 
FROM
   (
      SELECT
         db.column1 AS col1,
         db.column2 AS col2,
         db.column3 AS col3,
         CASE
            WHEN
               db.column4 IS NULL 
            THEN
               0 
            ELSE
               1 
         END
         AS col4, 
         db.column5 AS col5 
      FROM
         TABLE AS tab 
         INNER JOIN
            data as db 
            ON ( operator ) 
   )
   AS sivola 
WHERE
   sivola.col2 > x 
ORDER BY
   sivola.col2 ASC
"""
df = pd.read_sql(query, conn)

尽管我使用的是SET nocount ON;(许多帖子都建议使用),但我仍然收到错误TypeError: 'NoneType' object is not iterable

任何可行的解决方案?

编辑: 完全追溯

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-56-f01b80801200> in <module>()
     82 logging.error('Starting query from BL \n')
     83 
---> 84 df = pd.read_sql(query, conn)

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\sql.py in read_sql(sql, con, index_col, coerce_float, params, parse_dates, columns, chunksize)
    379             sql, index_col=index_col, params=params,
    380             coerce_float=coerce_float, parse_dates=parse_dates,
--> 381             chunksize=chunksize)
    382 
    383     try:

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\sql.py in read_query(self, sql, index_col, coerce_float, params, parse_dates, chunksize)
   1434         args = _convert_params(sql, params)
   1435         cursor = self.execute(*args)
-> 1436         columns = [col_desc[0] for col_desc in cursor.description]
   1437 
   1438         if chunksize is not None:

TypeError: 'NoneType' object is not iterable

1 个答案:

答案 0 :(得分:2)

您可以删除 SET nocount ON; USE database;

我认为从连接中获取结果的方法不正确。您可以使用游标执行任务而不得到任何东西,或者仅使用连接中的选择来获得东西,而没有这些行。