Тормоза в первую очередь из-за постоянного создания-удаления соединения, во-вторую - из-за создания-удаления курсора, в третью - из-за постоянного создания 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 и, например, не уверен, нужен ли тут коммит - возможно по умолчанию действует автокоммит при вставке одиночной строки.