我正在尝试检查临时表是否存在,如果存在,请使用pyodbc将其删除到SQL Server中。查询在管理工作室中工作,但在python中我得到错误
以前的SQL不是查询
cnxn = pyodbc.connect('APP=MyApp;DRIVER={SQL Server Native Client 10.0};SERVER=powerapp6-WRON;DATABASE=ICP;DSN=myserver;Trusted_Connection=yes')
cursor = cnxn.cursor()
cnxn.commit()
for mc in range(0,3,1):
speardata = (""" if object_id('tempdb..#tempCSID') is not null
begin
drop table #tempCSID
end
create table #tempCSID (csid int)
insert into #tempCSID (csid)
select top 500 [CSID]
from [ICP].[dbo].[CSID]
order by newid()
SELECT [ICP].[dbo].[CSunit_L].[CSID] ,[Nitrogen] ,[Incorp0] ,[Incorp200] ,[yield] ,[xdays] ,[accum_rain] ,[avg_maxt]
,[avg_mint] ,[accum_radn] ,[xgdays] ,[accum_g_rain] ,[avg_g_maxt] ,[avg_g_mint] ,[accum_g_radn] ,[effrain_g] ,[xshdays]
,[accum_sh_rain] ,[avg_sh_maxt] ,[avg_sh_mint] ,[accum_sh_radn] ,[effrain_sh]
FROM [ICP].[dbo].[CSunit_L]
inner join #tempCSID
on [ICP].[dbo].[CSunit_L].[CSID] = #tempCSID.csid and [ICP].[dbo].[CSunit_L].[Nitrogen] < 201
""")
ndata = np.array(cursor.execute(speardata).fetchall() )
我想知道它是否与前两行中的cnxn设置有关,因为tempdb
与ICP
数据库位于不同的位置?
答案 0 :(得分:1)
错误pyodbc.ProgrammingError: No results. Previous SQL was not a query
表示SQL的语法问题。在这种情况下,有多个DDL和DML查询仅由行终止符(\n
)分隔。
在您的情况下,最好将每个语句拆分为单独的cursor.execute(...)
调用,确保在临时表插入后connection.commit()
。然后执行select
以填充您之前尝试的numpy数组。