2 回答
TA貢獻(xiàn)1998條經(jīng)驗(yàn) 獲得超6個(gè)贊
包含多個(gè) SQL 語句的 SQL 命令文本稱為匿名代碼塊。一個(gè)匿名代碼塊可以返回多個(gè)結(jié)果,其中每個(gè)結(jié)果可以是
行數(shù),
包含零行或多行數(shù)據(jù)的結(jié)果集,或
一個(gè)錯(cuò)誤。
以下示例失敗...
sql = """\
SELECT 1 AS foo INTO #tmp;
SELECT * FROM #tmp;
"""
df = pd.read_sql_query(sql, cnxn)
# TypeError: 'NoneType' object is not iterable
...因?yàn)榈谝粋€(gè)在第二個(gè)返回其結(jié)果集SELECT ... INTO之前返回行數(shù)。SELECT
修復(fù)方法是啟動(dòng)匿名代碼塊,使用SET NOCOUNT ON;該代碼塊抑制行數(shù)并僅返回結(jié)果集:
sql = """\
SET NOCOUNT ON;
SELECT 1 AS foo INTO #tmp;
SELECT * FROM #tmp;
"""
df = pd.read_sql_query(sql, cnxn)
# no error
TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊
對(duì)于仍然遇到此錯(cuò)誤的其他任何人,我發(fā)現(xiàn)對(duì)于某些語句(聚合空值的窗口函數(shù)),我還需要包含SET ANSI_WARNINGS OFF;.
添加回答
舉報(bào)
