pypyodbc execute returns list index out of range error

橙三吉。 提交于 2021-02-10 17:26:15

问题


I have a function that runs 3 queries and returns the result of the last (using the previous ones to create the last) when I get to the 3rd query, it get a list index our of range error. I have ran this exact query as the first query (with manually entered variables) and it worked fine.

This is my code:

import pypyodbc

def sql_conn():
    conn = pypyodbc.connect(r'Driver={SQL Server};'
                            r'Server=HPSQL31\ni1;'
                            r'Database=tq_hp_prod;'
                            r'Trusted_Connection=yes;')
    cursor = conn.cursor()

    return conn, cursor


def get_number_of_jobs(ticket):
    # Get Connection
    conn, cursor = sql_conn()

    # Get asset number
    sqlcommand = "select top 1 item from deltickitem where dticket = {} and cat_code = 'Trq sub'".format(ticket)

    cursor.execute(sqlcommand)

    asset = cursor.fetchone()[0]

    print(asset)
    # Get last MPI date
    sqlcommand = "select last_test from prevent where item = {} and description like '%mpi'".format(asset)

    cursor.execute(sqlcommand)

    last_recal = cursor.fetchone()[0]

    print(last_recal)

    # Get number of jobs since last recalibration
    sqlcommand = """select count(i.item)
                    from deltickhdr as d
                    join deltickitem as i
                    on d.dticket = i.dticket
                    where i.start_rent >= '2017-03-03 00:00:00'
                    and i.meterstart <> i.meterstop
                    and i.item = '002600395'""" #.format(last_recal, asset)

    cursor.execute(sqlcommand)

    num_jobs = cursor.fetchone()[0]
    print(num_jobs)

    cursor.close()
    conn.close()

    return num_jobs

ticketnumber = 14195 # int(input("Ticket: "))
get_number_of_jobs(ticketnumber)

Below is the error(s) i get when i get to the 3rd cursor.execute(sqlcommand)

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2016.3.2\helpers\pydev\pydevd.py", line 1596, in <module>
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2016.3.2\helpers\pydev\pydevd.py", line 974, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2016.3.2\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Users/bdrillin/PycharmProjects/Torque_Turn_Data/tt_sub_ui.py", line 56, in <module>
    get_number_of_jobs(ticketnumber)
  File "C:/Users/bdrillin/PycharmProjects/Torque_Turn_Data/tt_sub_ui.py", line 45, in get_number_of_jobs
    cursor.execute(sqlcommand)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pypyodbc.py", line 1470, in execute
    self._free_stmt(SQL_CLOSE)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pypyodbc.py", line 1994, in _free_stmt
    check_success(self, ret)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pypyodbc.py", line 1007, in check_success
    ctrl_err(SQL_HANDLE_STMT, ODBC_obj.stmt_h, ret, ODBC_obj.ansi)
  File "C:\ProgramData\Anaconda3\lib\site-packages\pypyodbc.py", line 972, in ctrl_err
    state = err_list[0][0]
IndexError: list index out of range

Any help would be great


回答1:


I've had the same error. Even though I haven't come to the definite conclusion about what this error means I thought my guessing might help anyone else ending up here.

In my case, the problem was a conflict with a datatype length (NVARCHAR(24) and CHAR(10)).

So I guess this IndexError in ctrl_err function just means there is an error in your SQL code that pypyodbc does not know how to handle.

I know this is not much of an answer, but I know it would have saved me a couple of hours had I known this was not some bug in pypyodbc but an inconsistency in the data I was inserting.

Kind regards, Luka



来源:https://stackoverflow.com/questions/45396655/pypyodbc-execute-returns-list-index-out-of-range-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!