If you are using SQL parameters for the insertion statement, this is efficient enough; the bottleneck will be in the network communication with Oracle.
By using SQL parameters, Oracle is given a chance to prepare a query plan, then reuse it on each and every insert.
If you plan to roll back the transaction when an insertion fails, however, you may as well use .executemany()
.