【发布时间】:2020-06-03 01:44:29
【问题描述】:
我试图让 Python 在我的 SQL Server 中运行一个存储过程,该过程启动一系列过程,其中涉及导入一个文件处理它并输出几个文件。
到目前为止,我已经得到了我的代码,它可以接受对表的输入,但是当它调用存储过程时,整个事情都会挂起。
检查服务器上的Who2,它正在等待preemptive_OS_Pipeops,搜索显示它正在等待SQL Server 之外的某些东西完成,然后再继续。
如果可以使用 pyodbc 盲激活存储过程然后关闭连接,是否有人能够阐明?
我的信念是告诉程序运行然后关闭应该可以解决问题,但我在查找此代码时遇到问题
Python 代码:
connection2 = pypyodbc.connect('Driver={SQL Server}; Server=server;Database=db', timeout=1)
cursor2 = connection2.cursor()
cursor2.execute("{CALL uspGoBabyGo}")
connection2.close()
return 'file uploaded successfully'
存储过程:
BEGIN
SET NOCOUNT ON;
EXECUTE [dbo].[uspCableMapImport]
END
【问题讨论】:
-
如果您关闭连接,SP 将停止运行...它需要在连接下运行。您必须调试您的 SP 并找出它挂起的原因。
-
如消息中所述,SP 由于 Python 调用而挂起,我需要 Python 来启动 SP 然后关闭 Python 不需要进一步的输入 没有输出到 Python SP,为了安全起见,这是我设置它的方式,以便所有 Python 所做的只是将单个值输入到表中,然后启动 SP。 SP 因 Python 而挂起。
-
您无法关闭连接或将阻止 SP 完成。
-
“SP 因 Python 调用而挂起”——这实际上是什么意思? Python 调用如何影响 SP?
-
存储过程调用是同步的——在存储过程完成或 (pyodbc?) 语句超时之前,Python 不会继续。如果您希望存储过程启动异步进程,请查看Service Brokers and Queues 或其他解决方案。
标签: python sql-server stored-procedures pyodbc