python调用存储过程怎么传多个参数_Python - pyodbc调用具有参数名称的存储过程...
I need to call a SqlServer stored procedure from python2.7 via pyodbc module with input parameter name.
I tried based on documentation by input parameter order:
cursor.execute('{CALL [SP_NAME](?,?)}',
('value', 'value'))
It works, but I need to pass parameter name of stored procedure because order of stored procedure input parameter always changes. So I need to pass them by name.
cursor.execute('{CALL [SP_NAME](@param1name,@param2name)}',
('value', 'value'))
However this doesn't work. What's the correct syntax?
解決方案
I tested this using the following stored procedure in 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
The Bad News ("CALL")
I found that
sql = """\
{ CALL breakfast (@food=?, @person=?) }
"""
params = ('bacon','Gord')
crsr.execute(sql, params)
gave inconsistent results.
With the {SQL Server Native Client 10.0} ODBC driver it ignored the parameter names and treated the parameters as positional, yielding ...
bacon likes to eat Gord
... and with the older {SQL Server} ODBC driver I just got the error
DataError: ('22018', '[22018] [Microsoft][ODBC SQL Server Driver]Invalid character value for cast specification (0) (SQLExecDirectW)')
The Good News ("EXEC")
I found that
sql = """\
EXEC breakfast @food=?, @person=?
"""
params = ('bacon','Gord')
crsr.execute(sql, params)
gave me the following (correct) result using both ODBC drivers
Gord likes to eat bacon
總結(jié)
以上是生活随笔為你收集整理的python调用存储过程怎么传多个参数_Python - pyodbc调用具有参数名称的存储过程...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《JavaScript语言精髓与编程实践
- 下一篇: 游艇租用问题2