【问题标题】:“'NoneType' object is not iterable” error when trying to read sql query with pandas尝试使用 pandas 读取 sql 查询时出现“'NoneType' 对象不可迭代”错误
【发布时间】:2018-09-24 15:10:02
【问题描述】:

我遇到了以下帖子,这是我的确切情况。我有一个大型 SQL 查询,格式如下:

SET NOCOUNT ON

CREATE TABLE x
INSERT INTO x

CREATE TABLE y
INSERT INTO y
.
.
.

SELECT * FROM x join y
where a

UNION

SELECT * FROM x join y
where b

查询运行良好,按预期返回超过 15k 行。当我尝试将其读入 python 中的数据框时,我得到“NoneType”对象不可迭代错误,如下面的链接所述。我看到原始海报将他的查询转换为存储过程。我想知道是否有另一种方法可以解决此错误,而无需编写存储过程。

Python Pandas read_sql_query “'NoneType' object is not iterable” error

更新 - 插入 python 代码

server = 'server'
query = 'test.sql'
db  ='db'       
conn = pyodbc.connect(r'Driver={SQL Server};Server=' + dbserver + ';Database=' + database + ';Trusted_Connection=yes;')
fd = open(query, 'r')
df = pd.read_sql_query(fd.read(),conn)
fd.close()
conn.close()

【问题讨论】:

  • 你好,你的python代码也可以吗?
  • read_sql 本质上是用于读取 table/sql 并获取行。您可以单独运行这些 create 语句,并在查询中单独保留带有 union 的 select 语句。另一种方式当然是创建存储过程。
  • @mad_ 我试过你提到的。我基本上将创建语句拆分为一个 SQL,并使用 read_sql_query 写入数据帧。然后我对 select 语句做了同样的事情,我使用 read_sql_query 将它写入一个单独的数据帧。这导致了同样的错误。
  • 您能发布一下您是如何执行这些语句的吗?
  • ; 基本上将在大多数数据库中将每个查询彼此分开。 pandas.pydata.org/pandas-docs/version/0.22/generated/… docs 显示 read_sql 适合读取 pandas 数据帧中的表,但不适合 sql 执行。您有 pyodbc 驱动程序,您可以使用它来运行您的创建语句。看看这个stackoverflow.com/questions/7744742/…。我认为您可以使用 pyodbc 执行语句运行一系列查询。

标签: python sql pandas


【解决方案1】:

这可能是问题,因为这曾经是我的查询的问题。 发送查询时,请确保没有遗漏 分号。 在编辑器上,按 Enter 就可以了,但是当您发送它时,无论是作为字符串还是从您的文件中,您都必须在每个语句的末尾显式添加它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-25
    • 2021-01-23
    • 1970-01-01
    • 2020-03-09
    • 2011-12-13
    • 2016-09-11
    • 2017-02-20
    • 1970-01-01
    相关资源
    最近更新 更多