【发布时间】:2014-06-27 18:15:35
【问题描述】:
我有一个使用 pyodbc 调用 MSSQL 存储过程的 python 脚本,如下所示:
cursor.execute("exec MyProcedure @param1 = '" + myparam + "'")
我在循环中调用这个存储过程,我注意到有时,该过程在最后一次执行完成之前被再次调用。我知道这一点,因为如果我添加该行
time.sleep(1)
在执行行之后,一切正常。
有没有更优雅、更省时的说法,“睡到 exec 结束”?
更新(Divij 的解决方案):此代码目前不适合我:
from tornado import gen
import pyodbc
@gen.engine
def func(*args, **kwargs):
# connect to db
cnxn_str = """
Driver={SQL Server Native Client 11.0};
Server=172.16.111.235\SQLEXPRESS;
Database=CellTestData2;
UID=sa;
PWD=Welcome!;
"""
cnxn = pyodbc.connect(cnxn_str)
cnxn.autocommit = True
cursor = cnxn.cursor()
for _ in range(5):
yield gen.Task(cursor.execute, 'exec longtest')
return
func()
【问题讨论】:
-
查看my answer 以获得不需要对存储过程进行任何更改的现代工作解决方案。
-
我知道这看起来很奇怪,但是在 cursor.execute("exec ...") 之后我添加了 cursor.close() ,出于某种原因,这是在移动到下一个语句之前关闭光标。
标签: python sql sql-server stored-procedures pyodbc