簡體   English   中英

Python:Pyodbc使用參數執行存儲過程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM