错误:使用Python脚本和Pyodbc库查询MS SQL时必须声明表变量“@test”

问题描述 投票:0回答:1

我需要编写一个Python脚本来自动查询MS SQL数据库,进行一些数据处理(即连接、选择等),最后以csv格式输出数据。

这是一个简单的例子:

DECLARE @test1 TABLE(ID INT, Name Char); #create an intermediate/temporary table called test1

INSERT INTO @test1(ID, Name)
SELECT      identifier, name
FROM        table1; #insert data from table1 to test1

我使用

cursor.execute(each query)
分别执行这两个查询。我使用
pyodbc library
ODBC Driver 17
来连接和操作 sql 服务器。但是我收到以下错误:

pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]
Must declare the table variable "@test1". (1087) (SQLExecDirectW)')

这意味着test1表无法识别,无法作为变量传递来进行某些操作。我不确定这是否是由于 python 脚本无法执行“动态 sql”操作造成的。

任何人都可以给我关于如何使

Declare
工作的建议吗? 任何其他 python 库或其他编程语言支持动态 sql,以便我可以自动化此过程?预先感谢!

python sql odbc pyodbc pymssql
1个回答
0
投票

我通过不单独执行两个查询来使代码工作。相反,将查询作为大字符串传递是有效的:

cursor.execute("""
DECLARE @test1 TABLE(ID INT, Name Char);

INSERT INTO @test1(ID, Name)
SELECT      identifier, name
FROM        table1;
"""

之前,我使用了for循环:

queries = [
 "DECLARE @test1 TABLE(ID INT, Name Char);",
 "    INSERT INTO @test1(ID, Name)
    SELECT      identifier, name
    FROM        table1;"
 ]
for query in queries:
   cursor.execute(query)
© www.soinside.com 2019 - 2024. All rights reserved.