Cómo convertir la cadena hexadecimal a binaria en python para insertar usando cx_oracle

StackOverflow https://stackoverflow.com/questions/8886359

  •  29-10-2019
  •  | 
  •  

Pregunta

Tengo un archivo de texto que contiene una lista de números hexagonales de 16 bits (por ejemplo, '61C7393AA9B3474DB081C7B7CCE1C545') y necesito insertarlos una columna RAW de Oracle usando CX_Oracle. Intenté esto:

sql = "INSERT INTO GUIDS VALUES (HEXTORAW(:1))"
ids = [l.strip() for l in guidfile.readlines()]
cursor.bindarraysize = len(ids)
cursor.setinputsizes(cx_Oracle.BINARY)
cursor.executemany(sql, ids)

Pero falla con cx_oracle.databaseError: ORA-01036: Nombre/número de variable ilegal. ¿Necesito convertir los valores en binario en Python antes de llamar a Executemany? Y si es así, ¿cómo? NB El mismo SQL funciona bien con Cursor.Execute y un solo valor, solo con la lista que tengo problemas.

¿Fue útil?

Solución

Bueno, lo he resuelto, de un par de maneras. En primer lugar, el código anterior es incorrecto ya que crea una lista de valores, mientras que debería crear una lista de tuplas. es decir

ids = [(l.strip(),) for l in guidfile.readlines()]

y luego usando

cursor.setinputsizes(cx_Oracle.STRING)

funciona. Sobre la pregunta original: cómo deshacerse del Hextoraw, descubrí que esto funciona:

import base64
ids = [(base64.b16decode(l.strip()),) for l in guidfile.readlines()]
cursor.setinputsizes(cx_Oracle.BINARY)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top