PostgreSQL无法将JpegImageFile转义为二进制文件psycopg2

时间:2019-05-16 19:29:07

标签: python-3.x postgresql image psycopg2

ubuntu 18.04-Python 3.6.7-psycopg2 2.7.6.- Postgresql 10.8

将图像保存在bytea Posgtres字段中,导致psycopg2出现以下错误(Spyder3中的测试代码):

连接到PostgreSQL时出错,无法将JpegImageFile转义为二进制

如果我在Eclipse-pydev中运行相同的代码,则报告的错误类似,但给出了类型信息: TypeError:无法将JpegImageFile转义为二进制

-您能理解问题是否与Postgresql或psycopg2有关吗? -如何使我们成功地将图像文件保存在Postgresql中? -可能是图书馆错误吗?

在Postregsql中保存图像要求使用 bytea字段类型。 图像需要以十六进制格式或bytea转义格式进行编码。 如果我们读取网址图片,请通过 Bynary 中的psycopg2 转换, 但 当最终执行INSERT查询时,该函数返回上述错误。 以下代码可以重现该错误:

import psycopg2
import urllib.request
from PIL import Image
from io import BytesIO
import requests

url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/a/a3/Eq_it-na_pizza-margherita_sep2005_sml.jpg/440px-Eq_it-na_pizza-margherita_sep2005_sml.jpg'
#image = Image.open(urllib.request.urlopen(url))
response = requests.get(url)
image = Image.open(BytesIO(response.content))
#test image correctly read
width, height = image.size
print (width,height)   
try:
    connection = psycopg2.connect(user = "user",
                password = "odoo12", host = "127.0.0.1",
                port = "5432",database = "dbname")
    cursor = connection.cursor()
    query = """INSERT INTO foods (fo_image, fo_url) 
                VALUES (%s,%s) ;"""
    byteImage = psycopg2.Binary(image)        
    data = (byteImage, url )
    cursor.execute(query,data)
except (Exception, psycopg2.Error) as error :
        print ("Error while connecting to PostgreSQL", error)
finally:
        #closing database connection.
            if(connection):
                cursor.close()
                connection.close()

已根据尺寸检查图像并显示正确的信息。 更改不同的图像将显示相同的结果。 怎么了?如何解决?_

1 个答案:

答案 0 :(得分:0)

我认为您不需要python 3中的psycopg2.Binary

我怀疑您没有致电connection.commit()进行交易。