【问题标题】:How to commit stored procedure execution by using pyodbc?如何使用pyodbc提交存储过程执行?
【发布时间】:2025-12-13 06:55:02
【问题描述】:

我正在尝试通过在 databricks 中使用 pyodbc 来执行存储过程,在执行 SP 之后,我尝试提交连接,但是提交没有发生。在这里我给出我的代码,请帮助我解决这个问题。

import pyodbc

####   Connecting Azure SQL
def db_connection():
  try:
    username = "starsusername"
    password = "password-db"
    server = "server-name"
    database_name = "db-name2"
    port = "db-port"
    conn=pyodbc.connect('Driver={ODBC Driver 17 for SQL server};SERVER=tcp:'+server+','+port+';DATABASE='+ database_name +';UID='+ username +';PWD='+ password)
    cursor=conn.cursor()
    return cursor, conn
  except Exception as e:
    print("Faild to Connect AZURE SQL: \n"+str(e))

cursor, conn = db_connection()
# conn1.autocommit=True
cursor.execute("delete from db.table_name")
cursor.execute("insert into db.table_name(BUSINESS_DATE) values('2021-10-02')")
cursor.execute("exec db.SP_NAME '20211023'")
conn.commit()
conn.close()

在这里,我在 SP 执行后提交连接。删除和插入根本没有发生。我尝试使用 cursor.execute("SET NOCOUNT ON; exec db.SP_NAME '20211023'") 但它也不起作用。

提前致谢

【问题讨论】:

    标签: python azure-sql-database pyodbc


    【解决方案1】:

    如果你检查这个document on pyodbc,你会发现-

    要立即调用存储过程,请使用数据库可识别的格式或使用 ODBC 调用转义格式将调用传递给执行方法。然后,ODBC 驱动程序将为您重新格式化调用以匹配给定的数据库。

    请注意,在建立或完成连接后,请在致电您的 SP 之前尝试执行conn.autocommit = True,这会有所帮助。默认为假。

    1. 执行存储过程。

      如果你按照下面的代码sn-p,你将能够执行你的存储过程。

      cursor = conn.cursor()
      conn.autocommit = True
      executesp = """EXEC yourstoredprocedure """
      cursor.execute(executesp)
      conn.commit()
      
    2. 删除 SQL Server 中的记录

      您可以删除记录,如下例所示。

      ...#just an example
      cursor.execute('''
                  DELETE FROM product 
                  WHERE product_id in (5,6) 
                 ''')
      conn.commit()
      

      不要忘记在代码末尾添加 conn.commit(),以确保命令会被执行。

    3. 在 SQL Server 中插入记录

      下面的 sn-p 显示了我们如何做同样的事情。

      ...#just an example
      cursor.execute("INSERT INTO EMP (EMPNO, ENAME, JOB, MGR) VALUES (535, 'Scott', 'Manager', 545)")
      conn.commit()
      

    我建议您阅读以下文档以获取更多信息。

    【讨论】:

    • 而不是提交三次,我只想提交一次(最后),当我尝试执行 SP 本身时,SP 执行完成并在 python 中关闭连接,但它仍在 SSMS 后端运行。目标表中没有任何变化(插入、删除..)
    • 是的,你也可以这样做,而不是在每一步都提交,最后只能提交一次。