С cx_oracle не работал, но вижу, что там можно передавать словарь напрямую, если использовать привязку переменных, так что можно сделать таким образом:
data = [{'DOC_NUM': None, 'DOC_ORG': '0', 'GROUP_NUM': '987564', 'BOX_TYPE': '9999999 ', 'D_NUM': 'Номер города', 'BOX_NUM': '12345679', 'ADR': 'Огнева'}]
# сформировать список колонок и привязки параметров (по ":")
columns = ", ".join(data[0].keys())
bindings = ", ".join((f":{key}" for key in data[0].keys()))
sql = "insert into my_table ({}) values ({})".format(columns, bindings)
print(sql)
# должен получиться такой запрос
# insert into my_table (DOC_NUM, DOC_ORG, GROUP_NUM, BOX_TYPE, D_NUM, BOX_NUM, ADR) values (:DOC_NUM, :DOC_ORG, :GROUP_NUM, :BOX_TYPE, :D_NUM, :BOX_NUM, :ADR)
#который потом примет словарь данных напрямую (или просто execute, если нужна только одна первая строка data[0]
cur.executemany(sql, data)