首页 > 解决方案 > 将 python 2 转换为 python 3:读取图像文件

问题描述

在 python 2 中,我使用:

import MySQLdb

pathFileName = "/Users/ldam/Documents/test.png"
f = open(pathFileName, 'r')
img = f.read()
f.close()
conn = MySQLdb.connect(host='localhost', user='user', passwd='password', db='db')
cursor = conn.cursor()
inssql = "INSERT Data_images(data) VALUES('%s')"
cursor.execute(inssql % MySQLdb.escape_string(img))
cursor.close()
conn.close()

对下面的注释进行编码,在 python 3 中,我将文件读取为字节:

f = open(pathFileName, 'rb')
img = f.read()
f.close()
conn = MySQLdb.connect(host='localhost', user='user', passwd='password', db='db')
cursor = conn.cursor()
inssql = "INSERT Data_images(data) VALUES('%s')"
cursor.execute(inssql % MySQLdb.escape_string(img))
cursor.close()
conn.close()

但是,我尝试了很多方法将 img 数据插入到表数据库中,但它们都不起作用。谁能帮我将img数据保存到数据库中。非常感谢。

标签: pythondatabasepython-3.x

解决方案


感谢评论中的所有断言,图像文件只能作为字节对象打开,我没有尝试像我一样转换它,最终找到了保存图像数据的方法,如下所示:

import base64
f = open(pathFileName, 'rb')
img = base64.b64encode(f.read())
f.close()
conn = MySQLdb.connect(host='localhost', user='user', passwd='password', db='db')
cursor = conn.cursor()
inssql = "INSERT Data_images(data) VALUES('%s')"
cursor.execute(inssql % MySQLdb.escape_string(img).decode())
cursor.close()
conn.close()

要将此数据转换为与保存在 python 2 中的数据相同的处理方式非常简单:base64.b64decode(imgFromDB)


推荐阅读