使用cx_Oracle executemany将xls数据插入Oracle DB

时间:2018-11-30 05:59:31

标签: python cx-oracle

我正在尝试使用cx_Oracle将xls文件插入到oracle表中。以下是我尝试实现相同目标的方法。

wb = open_workbook('test.xls')
    values=[]
    sheets=wb.sheet_names()
xl_sheet=wb.sheet_by_name(s)
    sql_str=preparesql('MATTERS') ##this is function I have created which will return the insert statement I am using to load the table
    for row in range(1, xl_sheet.nrows):
        col_names = xl_sheet.row(0)
        col_value = []
        for name, col in zip(col_names, range(xl_sheet.ncols)):
            searchObj = re.search( (r"Open Date|Matter Status Date"), name.value, re.M|re.I)
            if searchObj:                           
                if (xl_sheet.cell(row,col).value) == '':
                    value = ''
                else:
                    value = datetime(*xlrd.xldate_as_tuple(xl_sheet.cell(row,col).value, wb.datemode))
                    value = value.strftime('%d-%b-%Y ')
            else:
                value = (xl_sheet.cell(row,col).value)
            col_value.append(value)
        values.append(col_value)

    cur.executemany(sql_str,values,batcherrors=True)

但是当我针对多个xls文件测试某些文件时,它抛出TypeError:由于客户端的限制,我无法共享数据。我觉得这个问题与excel中列的dtype有关到数据库。有什么方法可以匹配上面的值列表的dtpes来匹配DB中列的数据类型,或者是否有其他方法可以完成插入?我尝试使用dataframe.to_sql,但是这花费了大量时间。通过遍历值列表中的行,我可以插入相同的数据。

1 个答案:

答案 0 :(得分:0)

我建议您将数据导入panda数据框,因为使用pandas中的数据类型将变得非常容易。您可以更改整个列的数据类型,然后轻松插入。