Как исправить ошибку «не удается адаптировать» при сохранении двоичных данных с помощью python psycopg2 - PullRequest
4 голосов
/ 27 января 2010

Сегодня я столкнулся с этой ошибкой три раза в одном из наших проектов. Размещение проблемы и ее решения в Интернете для дальнейшего использования.

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

Это не удастся с ошибкой «не могу адаптироваться» из psycopg2.

Ответы [ 2 ]

4 голосов
/ 27 января 2010

Проблема в том, что struct.unpack возвращает результат кортежа, даже если распаковывается только одно значение. Вы должны убедиться, что вы захватили первый элемент из кортежа, даже если есть только один элемент. В противном случае при разборе аргумента psycopg2 sql не удастся преобразовать кортеж в строку с сообщением об ошибке «невозможно адаптировать».

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])
1 голос
/ 16 февраля 2010

«Can't adapt» возникает, когда psycopg не знает тип вашей переменной long_blob. Что это за тип?

Вы можете легко зарегистрировать адаптер , чтобы сообщить psycopg, как преобразовать значение для базы данных.

Поскольку это числовое значение, есть вероятность, что адаптер AsIs уже будет работать для вас.

...