如何 return 来自 PYODBC 的错误

How to return errors from PYODBC

我正在连接到 SQL Server 以执行存储过程。如果 SP 花费的时间超过 60 秒/3600 秒等,'poll' 服务器确定存储过程是否成功完成或返回错误的正确方法是什么?

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 的状态?

您似乎跳过了制作游标,因此您需要制作游标,然后获取结果。试试这个:

import pyodbc

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

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

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

考虑将 execute 包装在 try/except 中以捕获异常(encompass errors). If no error is raised, execute is assumed to run correctly. Also, use the 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)