невоспроизводимый cx_Oracle.NotSupportedError: значение Python не может быть преобразовано в значение базы данных - PullRequest
0 голосов
/ 31 октября 2018

Я получаю сообщение об ошибке вроде:

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
...