Проблема в том, что 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])