如何在存储过程中输入python变量?

时间:2019-04-09 10:56:10

标签: python sql sql-server pyodbc

我需要使用python脚本中的特定值来查询SQL Db,这是我到目前为止所拥有的:

conn = pyodbc.connect('<SQL-CREDENTIALS-HERE>')

# Create a cursor from the connection

crsr = conn.cursor()
sql = """\
DECLARE @DATA1 AS var_num;
DECLARE @DATA2 OUTPUT;

EXEC EXT_GetDATA
        @DATA1,
        @DATA2;

"""
crsr.execute(sql)   

为此,我遇到一个错误,即DATA1是无效的数据类型,我是否正在编写sqL查询?请注意,var_num是在脚本中的较早位置拉出的,此处未显示。

编辑:我也尝试了以下方法,但仍然没有运气:

conn = pyodbc.connect('')

# Create a cursor from the connection

crsr = conn.cursor()
sql = """\
DECLARE @DATA1 CHAR(20);
SET DATA1 = var_num;

DECLARE @DATA2 NVARCHAR;

EXEC EXT_GetDATA
        @DATA1,
        @DATA2 OUTPUT;

"""
crsr.execute(sql)

但是这仍然不起作用并返回错误:

Exception has occurred: ProgrammingError
(Invalid column name 'var_num'. (207) (SQLExecDirectW)")

谁能告诉我我在做什么错,我不想将var_num设置为列名?

1 个答案:

答案 0 :(得分:1)

pyodbc Wiki所示,类似这样的方法应该起作用:

crsr = conn.cursor()
sql = """\
DECLARE @out NVARCHAR(max);
EXEC EXT_GetDATA
        @DATA1 = ?,
        @DATA2 = @out OUTPUT;
SELECT @out AS output_value;
"""
crsr.execute(sql, var_num)  # pass `var_num` as input parameter value
the_output = crsr.fetchval()  # retrieve output parameter value