Теперь, когда вы решили проблему с форматом даты, рассмотрите возможность использования executemany()
для повышения производительности.Что-то вроде:
С файлом file.csv, содержащим:
26-Sep-19,Name1,Name1@email.com
26-Sep-19,Name2,Name2@email.com
26-Sep-19,Name3,Name3@email.com
, и таблица, созданная как:
create table table1 ("DATE" date, name varchar2(20), email varchar2(20));
Затем этот файл использует преобразование даты, упомянутое @anthonyработает:
# Set cursor sizes to match the table definition or known max data sizes
# create table table1 ("DATE" date, name varchar2(20), email varchar2(20));
cursor.setinputsizes(None, 20, 20)
# Adjust the batch size to meet your memory and performance requirements
batchSize = 1000
with open('file.csv', 'r') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
i = 0
data = []
for line in csv_reader:
data.append((line[0],line[1],line[2]))
i = i + 1
if (i % batchSize == 0):
print('batch')
cursor.executemany("""insert into table1 ("DATE",name, email) values (to_date(:1, 'DD-Mon-YY'), :2, :3)""", data)
data = []
i = 0
if (i % batchSize != 0):
print('final')
cursor.executemany("""insert into table1 ("DATE",name, email) values (to_date(:1, 'DD-Mon-YY'), :2, :3)""", data)
con.commit()
Для загрузки некоторых строк в БД на дальнем краю потребовалось 4 секунды с аналогичным сценарием (в основном это время подключения) против 36 секунд с execute()