[英]Python: Pyodbc execute stored procedure with parameters
我在使用Python 3.4執行SQL Server存儲過程時遇到問題。 我正在導入Pyodbc以創建連接,並且有幾行應該將數據發送到存儲過程。
我的Python:
sql = "exec <stored_procedure_name> @int1=?, @int2=?, @string1=?, @int3=?"
params = (irow[0], irow[15], irow[2], irow[6])
cursor.execute(sql, params)
存儲過程:
@int1 int,
@int2 int,
@string1 varchar(10),
@int3 int
AS
BEGIN
--Do stuff
END
執行腳本時,我沒有在命令提示符中出現錯誤。 當我打印
print(sql, params)
我得到一個奇怪的結果。 沒有任何內容插入到存儲過程中作為目標的表中。
exec <stored_procedure_name> @int1=?, @int2=?, @string1=?, @int3=? (0, 0, 'string', 0)
我是Python的新手,所以任何見解都會非常感激。 我在SO上看到的任何東西都沒有幫助。
我認為缺少的是提交。 對游標運行commit方法:
cursor.execute(sql, params)
cursor.commit()
或者在創建連接時設置autocommit=True
,如同提供的其他答案一樣。 該連接用於創建游標,因此當execute()
時,自動提交行為是固有的:
cnxn = pyodbc.connect(driver="<driver>", server="<server>",
database="<database>", uid="<username>", pwd="<password>",
autocommit=True)
我發現問題是由於未啟用自動提交而引起的。 Pyodbc默認將autocommit設置為False。
要啟用自動提交,您可以聲明連接,如:
cnxn = pyodbc.connect(driver="<driver>", server="<server>", database="<database>", uid="<username>", pwd="<password>", autocommit=True)
參數通常作為元組傳遞,所以
params = (irow[0], irow[15], irow[2], irow[6])
應該管用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.