Python3连接MySQL存储与读取图片完整指南
本文详解如何使用Python3和pymysql库将图片以二进制形式存入MySQL数据库并读取显示。涵盖建立连接、创建游标、处理二进制文件及解决Unicode编码错误的完整流程,提供代码示例与权限配置建议。
Python3向MySQL存储图片并显示
本文档主要介绍如何通过Python与数据库建立连接,并将图片数据存入数据库的方法。
首先,确保数据库已创建。接着打开命令行(CMD),输入ipconfig命令以查看本机的IP地址信息。

关键在于获取本机的IP地址,以便后续进行数据库连接配置。
接下来需要在MySQL中创建数据表并设置相应字段,具体建表代码如下:
create table image(id int(5)auto_increment primary key,image1 mediumblob)
随后启动Python开发环境,本文示例使用PyCharm作为编辑器。
代码中需要导入pymysql包以支持数据库操作。
将待存储的图片文件拖入PyCharm项目目录,并设定好文件名以便后续调用。首先以二进制读取模式('rb')打开图片文件。
f = open('2.jpg','rb')
img = f.read()
f.close()
接下来建立与MySQL数据库的连接:
gao = pymysql.connect(
host='157.142.13.27',#本机或其他机器的ip地址
port=3306,#接口
user='root',#用户名
passwd='******',#密码
db='gao',#你所使用的数据库
charset='utf8',#编码方式
use_unicode=True, )
使用cursor函数创建游标对象:
g = gao.cursor()
读取图片文件的具体内容。
f = open('2.jpg','rb')data = f.read()利用execute函数执行数据库修改操作:
g.execute('insert into image(image1) values (%s)'%data)注意:若遇到连接无权限的错误,需登录MySQL数据库,进入目标数据库后执行修改host的操作:
update user set host = '%' where user = 'root';mysql>flush rivileges
务必在操作结束时关闭游标和数据库连接,以释放资源。
完成后,可在数据库中查看表内容。由于直接显示二进制数据,界面可能呈现乱码。此时可在PyCharm环境中通过代码解析并显示图片。
Python将图片导入MySQL数据库
# 今天需要用Python实现将图片导入MySQL数据库。看了看网上的一些写法,自己也过一遍,记录下来,以防忘记。
# 功能:将图片导入到MySQL数据库
import sys
import pymysql
from PIL import Image
import os
path = "./"
#读取图片文件
fp = open("./陈丹江-420381198212068517.JPG", 'rb')
img = fp.read()
fp.close()
#建立一个MySQL连接
database = pymysql.connect(host="10.31.143.6", user="root", passwd="******", db="aaa", charset='utf8')
# 存入图片
# 创建游标
cursor = database.cursor()
#注意使用Binary()函数来指定存储的是二进制
sql = "INSERT INTO vbp_person_ext (person_id, image, img_type) VALUES (%s, %s, %s);"
args = ('39', img, 'JPG')
cursor.execute(sql, args)
database.commit()
# 关闭游标
cursor.close()
# 关闭数据库连接
database.close()
print("============")
print("Done! ")示例数据库表vbp_person_ext包含三个字段:person_id、image(存储图片信息)和img_type。
操作过程中可能遇到的问题
常见报错信息如下:
UnicodeEncodeError: 'latin-1' codec can't encode characters in position 303-304: ordinal not in range(256)
解决方法:在数据库连接参数中增加charset='utf8'以指定编码方式。
总结
以上为个人实践经验总结,希望能提供参考,欢迎支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









