Finding erroneous records from batch insert data load with executemany() in cx_Oracle in Python

Loading data to oracle via python 3 using cx_Oracle library. Here is code snippet:

for fl in processing_list:
    fname = fl.split('/')[-1]
    data_set = []
    data_reader = csv.reader(open(fl,'r'),delimiter='|')
    for rec in data_reader:
        rec.insert(0,fname)
        data_set.append(rec)
    curs.executemany('insert into test_sdp_dump values(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20,:21,:22,:23,:24,:25,:26,:27,:28,:29,:30,:31,:32,:33,:34,:35,:36,:37,:38,:39,:40,:41,:42,:43,:44,:45,:46,:47,:48,:49,:50,:51,:52,:53,:54,:55,:56,:57,:58,:59,:60,:61,:62,:63,:64,:65,:66,:67,:68,:69,:70,:71,:72,:73,:74,:75,:76,:77,:78,:79,:80,:81,:82,:83,:84,:85,:86,:87,:88,:89,:90,:91,:92,:93,:94,:95,:96,:97)',data_set,batcherrors=True)
    
    for error in curs.getbatcherrors():
        print('Error Message:' + error.message + 'Row Offset:' + str(error.offset))
        print(data_set[error.offset])

It works fine while inserting and giving error message. However, I need to have the erroneous records and keep it in file. Tried to find the record via Row Offset but it doesn't give the correct records. How can I get the erroneous records? Suggest a way forward kindly.



Read more here: https://stackoverflow.com/questions/64931027/finding-erroneous-records-from-batch-insert-data-load-with-executemany-in-cx-o

Content Attribution

This content was originally published by Leon at Recent Questions - Stack Overflow, and is syndicated here via their RSS feed. You can read the original post over there.

%d bloggers like this: