Come risolvere “non può adattarsi errore” durante il salvataggio di dati binari utilizzando python psycopg2

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

Domanda

Mi sono imbattuto in questo bug tre volte oggi in uno dei nostri progetti. Mettere il problema e la soluzione in linea per riferimento futuro.

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])

Questo non riuscirà con l'errore "non è in grado di adattarsi" dal psycopg2.

È stato utile?

Soluzione

Il problema è struct.unpack restituisce un risultato tupla, anche se v'è un solo valore per decomprimere. È necessario assicurarsi che si afferra il primo elemento della tupla, anche se v'è un solo elemento. Altrimenti psycopg2 sql argomento l'analisi non riuscirà cercare di convertire la tupla in una stringa che fornisce il messaggio di errore "non può adattarsi".

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])

Altri suggerimenti

"non può adattarsi" viene generato quando psycopg non conosce il tipo della variabile long_blob. Che tipo è?

Si può facilmente registrare un adattatore dire psycopg come convertire il valore per il database.

Poiché si tratta di un valore numerico, è probabile che il Asis adattatore sarebbe già lavorare per voi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top