【问题标题】:How to return errors from PYODBC如何从 PYODBC 返回错误
【发布时间】:2016-04-28 19:45:32
【问题描述】:

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

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

【问题讨论】:

    标签: python pyodbc


    【解决方案1】:

    考虑将execute 包装在try/except 中以捕获异常(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)
    

    【讨论】:

      【解决方案2】:

      您似乎已跳过创建游标,因此您需要先执行此操作,然后获取结果。试试这个:

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-07
        • 2011-11-05
        • 1970-01-01
        • 2021-04-26
        • 2023-01-10
        • 2012-09-24
        • 2017-08-11
        相关资源
        最近更新 更多