"无法将_io.BufferedRandom转义为二进制"尝试将图像插入BYTEA列时

时间:2017-05-18 11:26:55

标签: python postgresql psycopg2 bottle

所以我试图通过瓶子上传图片,并使用psycopg2将其插入postgres BYTEA列,但我遇到了这个错误:

TypeError: can't escape _io.BufferedRandom to binary

从插入数据的cursor.excute()行。

这是我的代码:

@route('/images', method='POST')
def upload_image():
    upload = request.files.get('image')
    img = Image.open(upload.file)  # Pillow
    binary = psycopg2.Binary(upload.file)
    cursor = connection.cursor()
    id = cursor.execute(
        '''
        INSERT INTO image (filename, data, width, height)
        VALUES (%s, %s, %s, %s)
        RETURNING id
        ''',
        (upload.filename, binary, img.width, img.height)
    )
    return id

我做错了什么?

1 个答案:

答案 0 :(得分:1)

我想知道问题是psycopg2.Binary是否需要字符串但是正在接收类文件对象。你有没有试过这些方面的东西?

binary = psycopg2.Binary(upload.file.read())

注意:您可能需要首先寻找文件的开头,因为(我猜)前一行的Image.open调用将消耗upload.file中的所有字节。