Python Pandas read_sql_query“'NoneType'对象不可迭代”错误

Pro*_*Sky 5 python pyodbc python-2.7

我正在尝试执行sql并将结果保存到Panda Dataframe中。这是我的代码。

        dbserver = 'validserver'
        filename = 'myquery.sql'
        database  ='validdb'       
        conn = pyodbc.connect(r'Driver={SQL Server};Server=' + dbserver + 
            ';Database=' + database + ';Trusted_Connection=yes;')
        fd = open(filename, 'r')
        resultingData = pd.read_sql_query(fd.read(),conn)
        fd.close()
        conn.close()
Run Code Online (Sandbox Code Playgroud)

pd.read_sql_query(fd.read(),conn)继续给我错误“ NoneType”对象不可迭代”错误

我可以在带有结果的sql服务器窗口中运行myquery.sql。我有SET NOCOUNT ON;

任何线索,我在这里想念什么,我该如何调试呢?myquery.sql有几个#temp表和联接。结果大约有75,000行。谢谢大家

更新:

我无法发布确切的查询,但这是查询的样子。

SET NOCOUNT ON;

SELECT SourceID, PeriodEndDate = MAX(PeriodEndDate)
INTO #SourceDate 
FROM table1
WHERE PERIODENDDATE <= 20171229
GROUP BY SourceID

SELECT RS.*, R.TypeCode INTO #final
FROM table2 RS
INNER JOIN #SourceDate SD ON SD.id = RS.id
INNER JOIN table3 R ON R.id = RS.id

select * from #final
Run Code Online (Sandbox Code Playgroud)

r.o*_*ook 5

据我了解,read_sql_query()无论如何只会返回您的第一条语句的结果。在这种情况下,SET NOCOUNT ON;正如您所看到的,将返回None,这就是您的代码失败的原因。IMO 您应该优化您的 SQL 语句以在该过程中返回一个表而不是多个表(因为您只想从 #final 中读取我假设)。

如果你真的想在一个数据框中有多个 sql 查询,你可以使用listssplit在这个线程中提到:

多选的 Pandas read_sql 查询