В данном случае происходит то, что для каждой вставляемой строки необходимо дождаться завершения транзакции, прежде чем начнется следующая.Работа здесь заключается в том, чтобы выполнить «массовую вставку» с использованием файла CSV, который загружается в память.Я знаю, как это сделать с помощью postgres (что я использую), но для оракула я не уверен.Вот код, который я использую для postgres, возможно, он будет чем-то полезен.
def bulk_insert_sql_replace(engine, df, table, if_exists='replace', sep='\t', encoding='utf8'):
# Create Table
df[:0].to_sql(table, engine, if_exists=if_exists, index=False)
print(df)
# Prepare data
output = io.StringIO()
df.to_csv(output, sep=sep, index=False, header=False, encoding=encoding)
output.seek(0)
# Insert data
connection = engine.raw_connection()
cursor = connection.cursor()
cursor.copy_from(output, table, sep=sep, null='')
connection.commit()
cursor.close()
Вот ссылка на другой поток, в котором содержится масса полезной информации об этой проблеме: Массовая вставка ADataFrame для панд с использованием SQLAlchemy