2016-04-28 86 views
3

我正在连接到SQL Server以执行存储过程。 “轮询”服务器以确定存储过程是否成功完成,或者如果SP耗时超过60秒/ 3600秒等,则返回错误的正确方法是什么?如何从PYODBC返回错误

import pyodbc 
cnxn = pyodbc.connect('DRIVER={SQL Server}; SERVER=ServerName; PORT=1433;DATABASE=dbname;UID=%s;PWD=%s' % (username, password)) 
cnxn.execute("EXECUTE msdb.dbo.sp_start_job 'TestSP'") 
<pyodbc.Cursor object at 0x0000000002D6DDB0> 

如何确定SP的状态?

回答

3

考虑一试包裹execute /除了捕获异常(这encompass errors)。如果不出现错误,则假定execute正确运行。另外,使用timeout variable(以秒为单位),因为如果发生超时,数据库应该提高OperationError

cnxn = pyodbc.connect('DRIVER={SQL Server}; SERVER=ServerName; PORT=1433; \ 
         DATABASE=dbname;UID={0};PWD={1}'.format(username, password)) 

cnxn.timeout = 60  
cursor = cnxn.cursor() 
try: 
    cnxn.execute("EXECUTE msdb.dbo.sp_start_job 'TestSP'") 
except Exception as e: 
    print(e) 
0

看起来你已经跳过制作游标,所以你需要这样做,然后获取结果。试试这个:

进口pyodbc

cnxn = pyodbc.connect('DRIVER={SQL Server}; SERVER=ServerName; PORT=1433;DATABASE=dbname;UID=%s;PWD=%s' % (username, password)) 

cursor = cnxn.cursor() 
cursor.execute("EXECUTE msdb.dbo.sp_start_job 'TestSP'") 

rows = cursor.fetchall() 
for row in rows: 
    # Do stuff 
    print(row)