【问题标题】:PyODBC execute stored procedure does not completePyODBC 执行存储过程未完成
【发布时间】:2016-04-25 01:49:35
【问题描述】:

我有如下代码,存储过程用来调用几个存储过程。我可以运行存储过程,它会在 SQL 2012 中顺利完成。我使用的是 Python 3.3。

cnxn = pyodbc.connect('DRIVER={SQL Server};Server=.\SQLEXPRESS;Database=MyDatabase;Trusted_Connection=yes;')
cursor = cnxn.cursor()

cnxn.timeout = 0
cnxn.autocommit = True

cursor.execute("""exec my_SP""") 

python 代码正在执行,我通过插入大量打印确定了这一点。 我确实看到了关于 python 等待 SP 完成的另一个问题。我尝试在执行后添加一个“time.sleep()”,并且改变时间(最多 120 秒)没有变化。 根据结果​​,存储过程似乎正在部分执行。数据表明它甚至中断了其中一个子存储过程,但是当从查询分析器运行 SP 时它很好。

我最好的猜测是这与 SQL 配置相关,但我不知道该去哪里找。

有什么想法吗?

【问题讨论】:

    标签: python sql sql-server stored-procedures sql-server-2012


    【解决方案1】:

    将 SET NOCOUNT OFF 添加到我的 proc 对我有用。

    【讨论】:

      【解决方案2】:

      只是跟进;使用下面链接中的时间功能并降低嵌套存储过程的级别,我取得了有限的成功。

      在我上面调用的级别,有 4 层嵌套的 SP;当您有 3 层或更少时,pyodbc 似乎表现得更好一些。对我来说没有多大意义,但它确实有效。

      make python wait for stored procedure to finish executing

      任何关于这背后的基本原理的意见将不胜感激。

      【讨论】:

        【解决方案3】:

        我遇到了同样的问题,并通过设置锁定变量的组合解决了它(请参阅本线程中 Ben Caine 的回答:make python wait for stored procedure to finish executing)并添加

        “设置 NOCOUNT 开启

        在“CREATE PROCEDURE ... AS”之后

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-11-29
          • 1970-01-01
          • 2019-11-01
          • 1970-01-01
          • 2017-02-23
          相关资源
          最近更新 更多