如何将 python 变量输入存储过程?
How can I input a python variable into a stored procedure?
我需要使用我的 python 脚本中的特定值查询 SQL 数据库,这是我目前所拥有的:
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)
但是这仍然不起作用,returns 错误:
Exception has occurred: ProgrammingError
(Invalid column name 'var_num'. (207) (SQLExecDirectW)")
谁能告诉我我做错了什么,我不想将 var_num
设置为列名??
如 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
我需要使用我的 python 脚本中的特定值查询 SQL 数据库,这是我目前所拥有的:
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)
但是这仍然不起作用,returns 错误:
Exception has occurred: ProgrammingError
(Invalid column name 'var_num'. (207) (SQLExecDirectW)")
谁能告诉我我做错了什么,我不想将 var_num
设置为列名??
如 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