Вставка данных xls в базу данных Oracle с помощью cx_Oracle executemany - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь вставить файл xls в таблицу оракулов с помощью cx_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: Я не могу поделиться данными из-за ограниченийот клиента. Я чувствую, что проблема связана с d-типом столбцов в Excel по сравнению с БД.Есть ли способ, которым я могу сопоставить dtpes из списка значений выше, чтобы соответствовать типу данных столбцов в БД, или есть ли другие способы сделать вставку?Я пытался использовать dataframe.to_sql, но это занимает много времени.Я могу вставить те же данные, просматривая строки в списке значений.

1 Ответ

0 голосов
/ 03 декабря 2018

Я предлагаю вам импортировать данные в panda dataframe, так как в pandas очень легко играть с типом данных.Вы можете изменить тип данных целого столбца, а затем легко вставить.

...