无法使用 Python 和 SQL 服务器执行参数化 SQL

Unable to execute parameterized SQL using Python and SQL Server

我正在尝试 运行 一个带有大量参数的存储过程。为此,我正在使用 pyodbc 库及其 cursor.execute 函数。

以下是我要执行的查询:

executionStr = "EXEC ? @ImportJSON= ?, ?=?, ?=?, ?=?",procName, data, param1, param1Value, param2, param2Value, param3, param3Value

当我 运行 查询时,它给我一个错误

TypeError: The first argument to execute must be a string or unicode query.

当我尝试 运行 下面的查询成功执行时,我可以看到数据进入。

executionStr = "EXEC "+procName+" @ImportJSON='"+data+"', "+param1+"='"+param1Value+"' , "+param2+"='"+param2Value+"' , "+param3+"='"+param3Value+"';"

我正在尝试 运行 之前格式的查询,以便保护我的代码免受 SQL 注入。

我也试过 运行 使用如下参数的查询,但给出了同样的错误:

preexe = "EXEC ? @ImportJSON= ?, "+param1+"=?, "+param2+"=?, "+param3+"=?"
procedure_cursor.execute(preexe,(procName, data, param1Value, param2Value, param3Value))

我不确定自己做错了什么或哪里出错了。任何帮助将不胜感激。

提前致谢。

您上次的尝试是正确的,但参数只能用于传递数据(例如,字符串、数字、日期等),而不是数据库对象名称(例如,table 名称、列名称、存储过程名称 等)。因此,您需要执行以下操作:

preexe = f"EXEC {procName} @ImportJSON= ?, {param1}=?, {param2}=?, {param3}=?"
procedure_cursor.execute(preexe, (data, param1Value, param2Value, param3Value))

如果您的代码可以完全控制 procNameparam1param2param3.