Python Pandas read_sql_query “' NoneType' object is not iterable”错误

标签 python python-2.7 pyodbc

我正在尝试执行一个 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()

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

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

知道我在这里遗漏了什么以及如何调试吗? myquery.sql 几乎没有#temp 表和连接。结果有大约 75k 行。谢谢大家。

更新:

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

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

最佳答案

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

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

Pandas read_sql query with multiple selects

关于Python Pandas read_sql_query “' NoneType' object is not iterable”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48287404/

相关文章:

python-2.7 - HAR 响应中没有 header

driver - 在 Ubuntu 18.04 集群上安装 NetSuite 64 位 ODBC 驱动程序时出现错误 :- Can't open lib '/opt/netsuite/odbcclient/lib64/ivoa27.

python - SQLAlchemy 无法自动加载 mssql 临时表

python - 为什么我在安装 imposm 时会出现错误?

python - 防止在每个请求上创建昂贵的对象

python - 如何在 Django 中链接我的 css、js 和图像文件链接

python - 在附加模式下,我的文件是否在 RAM 中打开?

python - 无法使用python从数据库中选择一千万行

python - 从python中的列表和字典的复杂列表中提取元素

Python密码保护