Python连接Mysql数据库,读写数据库中图片

本文详细介绍了如何在IDEA中安装和使用PyMySQL1.0.2版本来连接MySQL数据库,包括建立连接、执行SQL(如查询数据库版本)、存储和读取图片数据到数据库。同时,指出了在处理图片数据时需要注意的编码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文使用到的pymysql为1.0.2版本

 在IDEA中配置Python参考本人写的另一篇文章http://t.csdn.cn/OHCRC

第一步:安装PyMySQL

PyMySQL用于 python连接到MySQL数据库服务器,在IDEA中安装PyMySQL如下图所示。

在终端中输入命令:pip3 install PyMySQL

 第二步:连接数据库

1.打开数据库连接,使用方法pymysql.connect()

2.使用cursor()方法创建游标对象 

3.使用游标对象 . execute()方法执行SQL语句 

4.关闭数据库连接 ,关闭游标

以下代码修改connect中的内容即可直接运行

import pymysql
 
db = pymysql.connect(host='',#数据库所在地IP地址,本机默认localhost即可
                     user='',#数据库的用户名
                     password='',#用户密码
                     database='')#数据库的名称,不是数据库中表的名称
 
cursor = db.cursor()#创建一个游标对象

cursor.execute("SELECT VERSION()")# 执行 SQL 语句,查询数据库版本,返回一条数据
 
data = cursor.fetchone()# 使用 fetchone() 方法获取上面查询后返回的单条数据.
 
print ("Database version : %s " % data)
 
db.close()# 关闭数据库连接
cursor.close()#关闭游标对象

 第三步:向数据库中存入图片

1.打开图片,读取图片数据

2.使用游标对象 . execute()方法执行SQL语句插入图片数据

打开图片时,如果使用open('lucy.jpg')方式打开,而不在参数中添加'rb',则在执行SQL语句时,要将图片的数据使用escape_string方法进行转义,在pymysql1.0版本以上时,语句为:pymysql.converters.escape_string()

不推荐使用这种转义的方法,这种方法还需要在open函数中添加另一个参数encoding='ISO-8859-1',否则图片数据写入数据库时,会报错gbk格式或是其他格式无法解释图片数据。即使是添加了这个encoding参数,写入的数据也无法直接读取出来,读取出来会显示图片格式错误或格式不支持

import pymysql
 
db = pymysql.connect(host='',
                     user='',
                     password='',
                     database='')
#打开我目录下名为'lucy.jpg'图片
with open('lucy.jpg', 'rb') as f:
    img = f.read()

 
cursor = db.cursor()#创建一个游标对象

#使用游标对象执行插入图片数据的sql语句
sql="INSERT INTO Images  (Data) VALUES (%s)"
cursor.execute(sql ,img)
 
db.commit()#提交插入请求
 
db.close()# 关闭数据库连接
cursor.close()#关闭游标对象

第四步:从数据库中读取图片

1. execute()方法执行SQL语句读回图片数据

2. 使用fetchone()方法将图片数据写入一个文件

fetchone()也是游标对象的一个方法,该方法获取单条数据,获取下一个查询结果集,返回元组,cursor.fetchone()[0]即为提取第一个元素

import pymysql
 
db = pymysql.connect(host='',
                     user='',
                     password='',
                     database='')
#打开我目录下名为'lucy.jpg'图片
with open('lucy.jpg', 'rb') as f:
    img = f.read()

 
cursor = db.cursor()#创建一个游标对象

cursor.execute("SELECT Data FROM Images LIMIT 1")#提取数据库第一行数据

res = cursor.fetchone()[0]
with open('lc2.jpg', 'wb') as f:
    f.write(res)
 
db.close()# 关闭数据库连接
cursor.close()#关闭游标对象

附:读写图片代码及效果

import pymysql

db = pymysql.connect(host='',
                     user='',
                     password='',
                     database='',)

with open('lucy.jpg', 'rb') as f:
    img = f.read()

cursor = db.cursor()

sql="INSERT INTO Images  (Data) VALUES (%s)"
cursor.execute(sql ,img)
db.commit()

cursor.execute("SELECT Data FROM Images LIMIT 1")
res = cursor.fetchone()[0]
with open('lc2.jpg', 'wb') as f:
    f.write(res)


# 关闭数据库连接和游标连接
cursor.close()
db.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值