2016-04-28 46 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)