python - pandas.read_sql_query() 抛出 TypeError : 'NoneType' object is not iterable

标签 python sql-server python-3.x pandas pyodbc

我正在使用 pandas.read_sql_query 函数读取一些 sql 文件。一个查询在我挑出的某一特定位处抛出错误。

(python 位 - 没有什么奇怪的并且可以与其他查询一起使用)

@contextmanager
def open_db_connection(connection_string):
    pyodbc.pooling = False
    connection = pyodbc.connect(connection_string)

    try:
        yield connection
    except pyodbc.DatabaseError as err:
        error, = err.args
        sys.stderr.write(error.message)
    finally:
        connection.close()

noCount = """ SET NOCOUNT ON; """
with open_db_connection(connection_string) as conn:
    res = pd.read_sql_query(noCount+queryObj, conn)

下面的 sql 语句抛出一个错误,我不知道为什么会这样。前面的语句和各种临时表可以工作,并且可以使用 pandas.read_sql_query() 进行收集,但是在接下来的位中它会中断。


IF OBJECT_ID('tempdb..#test1') IS NOT NULL DROP TABLE #test1;
select t.PositionID, b.SecurityID
into #test1
from #tmp as t
inner join placeholder.dbo.items  as b on (b.PositionID = t.PositionID and b.StudyDate = '20191230')
where t.ast = 'eq';

IF OBJECT_ID('tempdb..#test2') IS NOT NULL DROP TABLE #test2;
select t.PositionID,    
       case
       when count(i.beta_index)=0 then 1
       else count(i.beta_index)
       end as noIndex
into #test2 
from #test1 as t 
   left join #beta_index as i on (t.SecurityID = i.isin)
   group by t.PositionID;

select * from #test2

这应该从 test2 返回数据。但需要注意的是 - 它在 SQL Server Management Studio 中执行和运行得非常好。

最佳答案

问题一直是我忽略了 SSMS 中的警告消息,我相信这会导致游标不是查询,并且 pyodbc 抛出编程错误“没有结果。以前的 SQL 不是查询。”因此 pandas.read_sql_query() 崩溃。

警告:

Warning: Null value is eliminated by an aggregate or other SET operation.

查询开头的“SET ANSI_WARNINGS OFF”解决了该问题。

我不认为这是最好的做法,尽管就我而言,我可以忽略这些警告。

关于python - pandas.read_sql_query() 抛出 TypeError : 'NoneType' object is not iterable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60078342/

相关文章:

找不到索引时,Python list.index 抛出异常

python - 将数组从 C 代码返回到 python

python - 如何使用 matplotlib 与极坐标图共享轴

python - 根据分隔符拆分字符串列并将其转换为 Pandas 中的字典,无需循环

sql - 需要有关 sql server 表的建议

python - Pandas:读取 CSV 时强制错误

python - 如何解析列表的列表并将元素一起分析以查看它们随时间出现了多少次?

SQL Server 简单插入语句超时

c# - .NET 异步 Oracle 连接的方法

python - 我可以将 libVLC 的 Python 绑定(bind)与 Python 3.x 一起使用吗?