Python 迭代多个excel文件并尝试将数据写入sql表时出错

Python 迭代多个excel文件并尝试将数据写入sql表时出错,python,sql,excel,file,Python,Sql,Excel,File,下午好 我正在尝试让下面的代码块工作。代码的目的是执行以下步骤: 迭代给定目录中的多个文件 对于每个文件,如果没有数据,则对数据进行规范化处理,这样就没有空白单元格 将数据写入sql表。(我没有包括实际的sql语句,因为实际更新没有问题。) 代码: 当我运行这段代码时,第一次迭代似乎有效,但在第二次迭代中,我得到以下错误: Traceback (most recent call last): File "I:\Python\Python 2.7 Scripts\Src\ExcelLoop.p

下午好

我正在尝试让下面的代码块工作。代码的目的是执行以下步骤:

  • 迭代给定目录中的多个文件
  • 对于每个文件,如果没有数据,则对数据进行规范化处理,这样就没有空白单元格
  • 将数据写入sql表。(我没有包括实际的sql语句,因为实际更新没有问题。)
  • 代码:

    当我运行这段代码时,第一次迭代似乎有效,但在第二次迭代中,我得到以下错误:

    Traceback (most recent call last):
      File "I:\Python\Python 2.7 Scripts\Src\ExcelLoop.py", line 92, in <module>
        cursor.execute(update_dyna,values)  
    pyodbc.Error: ('HY000', '[HY000] [DataDirect][ODBC Sybase Wire Protocol driver]Data type for parameter 2 has changed since first SQLExecute call. (0) (SQLExecDirectW)')
    

    您的XLS文件中是否有标题,如果有,您是否正确处理了这些标题?我有,并且我认为通过我构建循环的方式,我绕过了试图写入SQL的行。我发现了问题,excel中b列中的数据具有不同长度的数据。因此,对于第1行和第2行,数据长度为6个字符。对于第3行,数据长度为7个字符,当更新到达该行时,即触发错误时。如果我将b列中的数据设置为6个字符长并运行脚本,则所有内容都会得到正确处理。有人知道为什么会这样吗?您使用的是什么类型的数据库,B映射到的列是什么数据类型?sybase和B列是字符类型。
    Traceback (most recent call last):
      File "I:\Python\Python 2.7 Scripts\Src\ExcelLoop.py", line 92, in <module>
        cursor.execute(update_dyna,values)  
    pyodbc.Error: ('HY000', '[HY000] [DataDirect][ODBC Sybase Wire Protocol driver]Data type for parameter 2 has changed since first SQLExecute call. (0) (SQLExecDirectW)')
    
    columns =     ['secsym','pvsym','min_bid_off','min_bid_off_pt','min_ask_off','min_ask_off_pt','max_bid_off','max_bi    d_off_pt','max_ask_off','max_ask_off_pt']
    tableName = "cm_dyna"
    for row_index in range(1, sheet.nrows):
    
        values = []
        row_num         = row_index
        for i in range(2):
            values.append("'" + sheet.cell(row_index,i).value.encode('ascii','ignore').rstrip().upper() + "'")
        for i in range(2,sheet.ncols):
            values.append(float(sheet.cell(row_index,i).value))
        print values  
    
        query = "insert into " + tableName + "(" + ",".join(columns) + ") values("
        query += ",".join([str(x) for x in values]) + ")"
        print query
        cursor.execute(query)
        cnxn.commit()