Pregunta

me encontré con este error tres veces hoy en día en uno de nuestros proyectos. Poner el problema y la solución en línea para referencia futura.

impost psycopg2

con = connect(...)

def save(long_blob):
     cur = con.cursor() 
     long_data = struct.unpack('<L', long_blob)
     cur.execute('insert into blob_records( blob_data ) values (%s)', [long_data])

Esto producirá el error "no se puede adaptar" de psycopg2.

¿Fue útil?

Solución

El problema es retornos struct.unpack resultado tupla, incluso si sólo hay un valor para desempaquetar. Es necesario asegurarse de que agarrar el primer elemento de la tupla, incluso si sólo hay un elemento. De lo contrario sql psycopg2 análisis de argumentos se producirá un error tratar de convertir a la tupla a una cadena que especifica el mensaje "no se puede adaptar" error.

impost psycopg2

con = connect(...)

def save(long_blob):
     cur = con.cursor() 
     long_data = struct.unpack('<L', long_blob)

     # grab the first result of the tuple
     long_data = long_data[0]

     cur.execute('insert into blob_records( blob_data ) values (%s)', [long_data])

Otros consejos

"No se puede adaptar" se eleva cuando psycopg no conoce el tipo de la variable de long_blob. Qué tipo es?

Puede fácilmente registrar una adaptador para contar psycopg cómo convertir el valor de la base de datos.

Debido a que es un valor numérico, lo más probable es que el ASIS adaptador ya tendría un trabajo para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top