0

我正在尝试检查临时表是否存在,如果存在,请使用 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

4

1 回答 1

1

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

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

于 2012-08-24T12:52:53.760 回答