python-3.x pandas.read查询()抛出类型错误:“NoneType”对象不可迭代

u59ebvdq  于 2022-11-26  发布在  Python
关注(0)|答案(2)|浏览(125)

我正在使用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

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

hts6caw3

hts6caw31#

The issue all along was that I was ignoring/disregarding warning messages in SSMS, which, I believe, results in cursor not being a query and pyodbc throwing ProgrammingError "No results. Previous SQL was not a query." and consequently pandas.read_sql_query() crashing.
警告:
警告:聚合或其他SET操作消除了Null值。
查询开头的"SET ANSI_WARNINGS OFF"解决了该问题。
我不认为这是最好的做法,虽然在我的情况下,我可以无视这些警告。

ttcibm8c

ttcibm8c2#

得到了这个答案,而搜索其他webistes,因为我得到了同样的问题,但teradata。
由于Teradata既没有设置NOCOUNT ON也没有设置ANSI_WARNINGS OFF,因此不得不求助于其他方法来解决这个问题。
没有使用read_sql,而是使用cursor对象来运行查询。
发出pd.read_sql(查询,会话)
下面使用Curr =会话.游标()curr.执行(查询)
下面是我得到答案的原始站点https://www.anycodings.com/1questions/4980247/nonetype-object-is-not-iterable-error-in-pandas

相关问题