Python - pyodbc 使用参数名称调用存储过程
Python - pyodbc call stored procedure with parameter name
我需要使用输入参数名称通过 pyodbc
模块从 python2.7
调用 SqlServer stored procedure
。
我试过基于documentation输入参数顺序:
cursor.execute('{CALL [SP_NAME](?,?)}',
('value', 'value'))
它有效,但我需要传递 parameter name of stored procedure
因为存储过程输入参数的顺序总是变化的。所以我需要按名称传递它们。
cursor.execute('{CALL [SP_NAME](@param1name,@param2name)}',
('value', 'value'))
但是这不起作用。正确的语法是什么?
这个语法似乎对我有用:
cursor.execute('{CALL [SP_NAME](@param1name=?, @param2name=?)}',
('value', 'value'))
我在 SQL Server 2008 R2 中使用以下存储过程对此进行了测试:
CREATE PROCEDURE [dbo].[breakfast]
@person varchar(50) = 'nobody',
@food varchar(50) = 'tofu'
AS
BEGIN
SET NOCOUNT ON;
SELECT @person + ' likes to eat ' + @food
END
坏消息 ("CALL")
我发现
sql = """\
{ CALL breakfast (@food=?, @person=?) }
"""
params = ('bacon','Gord')
crsr.execute(sql, params)
给出了不一致的结果。
对于 {SQL Server Native Client 10.0}
ODBC 驱动程序,它忽略参数 names 并将参数视为位置参数,产生 ...
bacon likes to eat Gord
...使用较旧的 {SQL Server}
ODBC 驱动程序,我刚收到错误
DataError: ('22018', '[22018] [Microsoft][ODBC SQL Server Driver]Invalid character value for cast specification (0) (SQLExecDirectW)')
好消息 ("EXEC")
我发现
sql = """\
EXEC breakfast @food=?, @person=?
"""
params = ('bacon','Gord')
crsr.execute(sql, params)
使用两个 ODBC 驱动程序给我以下(正确的)结果
Gord likes to eat bacon
我需要使用输入参数名称通过 pyodbc
模块从 python2.7
调用 SqlServer stored procedure
。
我试过基于documentation输入参数顺序:
cursor.execute('{CALL [SP_NAME](?,?)}',
('value', 'value'))
它有效,但我需要传递 parameter name of stored procedure
因为存储过程输入参数的顺序总是变化的。所以我需要按名称传递它们。
cursor.execute('{CALL [SP_NAME](@param1name,@param2name)}',
('value', 'value'))
但是这不起作用。正确的语法是什么?
这个语法似乎对我有用:
cursor.execute('{CALL [SP_NAME](@param1name=?, @param2name=?)}',
('value', 'value'))
我在 SQL Server 2008 R2 中使用以下存储过程对此进行了测试:
CREATE PROCEDURE [dbo].[breakfast]
@person varchar(50) = 'nobody',
@food varchar(50) = 'tofu'
AS
BEGIN
SET NOCOUNT ON;
SELECT @person + ' likes to eat ' + @food
END
坏消息 ("CALL")
我发现
sql = """\
{ CALL breakfast (@food=?, @person=?) }
"""
params = ('bacon','Gord')
crsr.execute(sql, params)
给出了不一致的结果。
对于 {SQL Server Native Client 10.0}
ODBC 驱动程序,它忽略参数 names 并将参数视为位置参数,产生 ...
bacon likes to eat Gord
...使用较旧的 {SQL Server}
ODBC 驱动程序,我刚收到错误
DataError: ('22018', '[22018] [Microsoft][ODBC SQL Server Driver]Invalid character value for cast specification (0) (SQLExecDirectW)')
好消息 ("EXEC")
我发现
sql = """\
EXEC breakfast @food=?, @person=?
"""
params = ('bacon','Gord')
crsr.execute(sql, params)
使用两个 ODBC 驱动程序给我以下(正确的)结果
Gord likes to eat bacon