Как увеличить скорость записи в базу при парсинге XML файла?
Тормоза в первую очередь из-за постоянного создания-удаления соединения, во-вторую - из-за создания-удаления курсора, в третью - из-за постоянного создания query, в четвёртую - из-за коммитов.
Все эти операции достаточно совершить один раз.
update Владимир, на самом деле я не предлогал создавать 100500 тивиальных функций, можно без них:import cx_Oracle
import xml.etree.ElementTree as ET

tree = ET.parse(filexml)
element_xml_root = tree.getroot()
db = cx_Oracle.connect("SYSTEM", "1234567890", "localhost/ORCL")
dbcur = db.cursor()
query_pac = dbcur.prepare('INSERT INTO pac_table (idpac, fam, im, ot)'
                          ' VALUES (:idpac, : fam, : im, : ot)')
query_usl = dbcur.prepare('INSERT INTO usl_table (idpac, code_usl, date_usl, price_usl)'
                          ' VALUES (:idpac, : code_usl, : date_usl, : price_usl)')

for elem in element_xml_root.findall('ZAP'):
    idpac = elem.find('ID_PAC').text
    fam = elem.find('FAM').text
    im = elem.find('IM') .text
    ot = elem.find('OT') .text
    dbcur.execute(query_pac, (idpac, fam, im, ot))
    for data in elem.findall('DATA'):
        code_usl = data.find('CODE') .text
        date_usl = data.find('DATE') .text
        price_usl = data.find('PRICE') .text
        dbcur.execute(query_usl, (idpac, code_usl, date_usl, price_usl))
db.commit()
dbcur.close()
зы аккуратно - код написан на коленке ) Я не работал с Oracle и, например, не уверен, нужен ли тут коммит - возможно по умолчанию действует автокоммит при вставке одиночной строки.
уважаемый longclaps  хотел сказать что нужно сделать отдельную функцию под открытие соединения и создание курсора, вторую функцию под инсерты или использовать bulkinsert, третью под коммит, четвертую под закрытие курсора. или же посмотрите есть ли на тригеры на вставку на таблице или же запуск хранимых процедур. это тоже может тормозить процесс.
в вашей ситуации, то что Вы написали, это как прийти в магазин за каждой монетой лезть в кошелек, открывать его, доставать монету, закрывать кошелек, ложить его в карман и потом опять по новой, пока не наберете нужную сумму