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()
已根据尺寸检查图像并显示正确的信息。 更改不同的图像将显示相同的结果。 怎么了?如何解决?_
答案 0 :(得分:0)
我认为您不需要python 3中的psycopg2.Binary
。
我怀疑您没有致电connection.commit()
进行交易。