python - 将 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数据保存到数据库中。非常感谢。
解决方案
感谢评论中的所有断言,图像文件只能作为字节对象打开,我没有尝试像我一样转换它,最终找到了保存图像数据的方法,如下所示:
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)
推荐阅读
- python - Apache Airflow DAG 不调用 on_success_callback 和 on_failure_callback
- laravel - 方法 update() 的日期检查
- javascript - Javascript - 如何使用不在同一范围内的 onClick 事件侦听器清除回调内的 setInterval
- c# - ASP.NET Core 路由引擎混淆
- sql - MS Access 参数中的多个值
- cucumber - 黄瓜测试示例未运行
- qemu - QEMU:如何在没有 fpu 的情况下创建 486 VM
- mysql - MYSQL:如何根据另一个表中的数据选择列?
- c# - 比较两个大列表的最佳方法,C#
- python - Keras 批量标准化和样本权重