Я получаю сообщение об ошибке вроде:
cx_Oracle.NotSupportedError: Python value cannot be
converted to a database value
Предполагается, что причина в данных, которые я пытаюсь вставить в базу данных.
Я печатаю данные, отправленные в базу данных Oracle 12, и это кажется нормальным.
Более того, я выбрал данные insert_batch, которые вызвали ошибку, и когда
Я загружаю маринованные данные и пытаюсь сохранить их в базе данных,
sql_batch_insert_encoded_traza
отлично работает.
Что может происходить?
CREATE TABLE LOG_TRACES
(
ID_EVENTO_LOG NUMBER NOT NULL,
FECHA TIMESTAMP(6) NOT NULL,
NIVEL RAW(1) NOT NULL,
SERVICIO RAW(2) NOT NULL,
ID_REGEX RAW(2) NOT NULL,
DIRECCION_IP RAW(4),
ID_TRACE_SLEUTH VARCHAR2(20 CHAR),
ID_PETICION NUMBER,
OPERACION RAW(1),
CLASE RAW(2),
COMPONENTE RAW(2),
CONSTRAINT unique_TRAZAS_ID UNIQUE (ID_EVENTO_LOG)
)
def sql_batch_insert_encoded_traza(cursor, dto_batch):
if DEBUG: print(dto_batch)
insert_query='''INSERT INTO LOG_TRACES (
ID_EVENTO_LOG, FECHA, NIVEL,
SERVICIO, ID_REGEX, DIRECCION_IP,
ID_TRACE_SLEUTH, ID_PETICION, OPERACION,
CLASE, COMPONENTE)
VALUES (
:ID_EVENTO_LOG,
:FECHA,
:NIVEL,
:SERVICIO,
:ID_REGEX,
:DIRECCION_IP,
:ID_TRACE_SLEUTH,
:ID_PETICION,
:OPERACION,
:CLASE,
:COMPONENTE
)'''
cursor.prepare(insert_query)
cursor.executemany(None, dto_batch)
conn = cx_Oracle.connect(username, passwd, dsn_tns)
cursor = conn.cursor()
for ...:
...
try:
sql_batch_insert_encoded_traza(cursor, insert_batch)
except:
print("insert_batch at fault: ", insert_batch)
conn.commit()
cursor.close()
conn.close()
conn=None