亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

來自 pandas read_sql 的“TypeError:'NoneType' 對象不可迭代”

來自 pandas read_sql 的“TypeError:'NoneType' 對象不可迭代”

慕哥6287543 2022-05-24 15:12:04
我正在嘗試在 python 中使用 pyodbc 運行 SQL 命令。其中 SQL 命令包含多個 SELECT 命令和 IF 語句。但我收到如下錯誤columns = [col_desc[0] for col_desc in cursor.description]TypeError: 'NoneType' object is not iterableimport pyodbcimport pandas as pdconn = pyodbc.connect("DRIVER={SQL Server};"                "SERVER=server_name;"                "DATABASE=master;"                "Trusted_Connection=yes;")cursor = conn.cursor()script="""If object_id ('tempdb..#Temp1')is not nulldrop table #Temp1Select distinct  a1.some_ID into #Temp1from DOC.dbo.Document_tbl (NOLOCK)a1from #Temp1 a1If object_id ('tempdb..#Temp2')is not nullDrop table #Temp2select distinct v2.some_datainto #Temp2 from tbl_name (nolock) v2 If object_id ('tempdb..#Results')is not nulldrop table #Resultsselect distinct a1.*,b1.####into #Resultsfrom #Temp1 a1left join #Temp2 b1 on a1.## = b1.##Select * from #Results"""df = pd.read_sql(script, cnxn)writer = pd.ExcelWriter('result.xlsx')df.to_excel(writer, sheet_name ='bar')writer.save()
查看完整描述

2 回答

?
米琪卡哇伊

TA貢獻1998條經驗 獲得超6個贊

包含多個 SQL 語句的 SQL 命令文本稱為匿名代碼塊。一個匿名代碼塊可以返回多個結果,其中每個結果可以是

  • 行數,

  • 包含零行或多行數據的結果集,或

  • 一個錯誤。

以下示例失敗...

sql = """\

SELECT 1 AS foo INTO #tmp;

SELECT * FROM #tmp;

"""

df = pd.read_sql_query(sql, cnxn)

# TypeError: 'NoneType' object is not iterable

...因為第一個在第二個返回其結果集SELECT ... INTO之前返回行數。SELECT


修復方法是啟動匿名代碼塊,使用SET NOCOUNT ON;該代碼塊抑制行數并僅返回結果集:


sql = """\

SET NOCOUNT ON;

SELECT 1 AS foo INTO #tmp;

SELECT * FROM #tmp;

"""

df = pd.read_sql_query(sql, cnxn)

# no error


查看完整回答
反對 回復 2022-05-24
?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

對于仍然遇到此錯誤的其他任何人,我發現對于某些語句(聚合空值的窗口函數),我還需要包含SET ANSI_WARNINGS OFF;.



查看完整回答
反對 回復 2022-05-24
  • 2 回答
  • 0 關注
  • 346 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號