使用pyodbc删除sql server中的临时表

时间:2012-08-24 04:06:23

标签: pyodbc

我正在尝试检查临时表是否存在,如果存在,请使用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设置有关,因为tempdbICP数据库位于不同的位置?

1 个答案:

答案 0 :(得分:1)

错误pyodbc.ProgrammingError: No results. Previous SQL was not a query表示SQL的语法问题。在这种情况下,有多个DDL和DML查询仅由行终止符(\n)分隔。

在您的情况下,最好将每个语句拆分为单独的cursor.execute(...)调用,确保在临时表插入后connection.commit()。然后执行select以填充您之前尝试的numpy数组。