不可复制cx_Oracle.NotSupportedError:Python值无法转换为数据库值

时间:2018-10-31 12:35:19

标签: python-3.x oracle cx-oracle

我遇到类似以下错误:

cx_Oracle.NotSupportedError: Python value cannot be
converted to a database value

原因应该是我要插入到de DB中的数据中。

我正在打印发送到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

0 个答案:

没有答案