【发布时间】:2013-05-12 20:43:01
【问题描述】:
我有一个 python 脚本可以将文件从 SFTP 站点下载到本地文件夹,然后使用下载的文件运行存储过程。第一个方面运行良好。但随后执行存储过程会导致 SQL 服务器上的其他表被锁定 - 返回“超时已过期”错误。该程序已经运行了一个半小时。
这是我用于执行存储过程的语法,以防有人想知道:
conn = pyodbc.connect('DRIVER={SQLServer};SERVER=localhost;DATABASE=Db;UID=myid;PWD=mypwd')
cursor = conn.cursor()
cursor.execute("""exec SP_Upsert_Y ?""",sfile)
cursor.commit()
【问题讨论】:
-
在 SQL Sever 中以本机方式运行该过程是否需要很长时间?以这种方式运行时是否也会锁定数据库?
-
不,当我在 sql server 中直接运行存储过程时,它会在一分钟或更短的时间内执行,并且不会锁定数据库。
-
程序是做什么的?它是
BULK INSERT文件还是类似的东西?如果是这样,您的 Python 代码是否可能尚未发布该文件?您还多次提到锁定,您是如何观察到锁定导致问题的?您是否使用过 SQL Profiler 来观察过程的执行?提及 SQL Server、Python 和 pyodbc 的版本也可能会有所帮助。 -
嗨 Pondlife。是的,存储过程将文件批量插入到临时表中,进行一些修剪,然后插入到永久表中。我提到了锁定,因为当我尝试访问某些表时,我收到错误“超过锁定请求超时时间”。我正在使用 SQL Server 2012、python 2.7 和最新版本的 pyodbc(我已经简单安装了它——不记得确切的版本是什么)。谢谢
-
如果可能,请发布存储过程的代码以及 SQL Profiler 发生的情况
标签: python sql-server pyodbc