Comment réparer “ne peut pas s'adapter erreur” lors de l'enregistrement des données binaires à l'aide de python psycopg2
J'ai couru à travers ce bug trois fois aujourd'hui dans l'une de nos projets. Mettre le problème et la solution en ligne de référence pour l'avenir.
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])
Cette échoue avec le message d'erreur "ne peut pas s'adapter" à partir de psycopg2.
OriginalL'auteur Great Turtle | 2010-01-27
Vous devez vous connecter pour publier un commentaire.
Le problème est struct.déballez retourne un tuple résultat, même si il n'y a qu'une seule valeur pour décompresser. Vous devez assurez-vous de prendre le premier élément du tuple, même si il n'y a qu'un seul élément. Sinon psycopg2 sql argument de l'analyse échoue d'essayer de convertir le tuple d'une chaîne de caractères donnant le "ne peut pas s'adapter" message d'erreur.
OriginalL'auteur Great Turtle
"Ne peut pas s'adapter" est déclenché lorsque psycopg ne connais pas le type de votre
long_blob
variable. De quel type est-il?Vous pouvez facilement enregistrer un adaptateur dire psycopg comment faire pour convertir la valeur de la base de données.
Parce que c'est une valeur numérique, les chances sont que les AsIs adaptateur serait déjà travailler pour vous.
OriginalL'auteur piro