mysql有一种存储类型叫MEDIUMBLOB,可以用来存储二进制格式的图片等其他文件。
上传:从图片格式转为二进制格式,然后存入数据库。
下载:从数据库获取到二进制格式的图片,然后转换为图片格式。
import pymysql
'''
建立表语句 ID 标题 图片的二进制模式
CREATE TABLE Pictures(PId INT PRIMARY KEY AUTO_INCREMENT,PTitle varchar(255), PicturesByte MEDIUMBLOB)
'''
# 连接数据库
conn = pymysql.connect(
host="localhost",
user="root",
password="123456",
database="QianFuXin",
charset="utf8")
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 上传图片到数据库
def uploadPicture(picturePath, PTitle):
# 读取图片并保存为二进制
picture = open(picturePath, 'rb')
pictureByte = picture.read()
picture.close()
# 将二进制文件插入数据库
query = 'insert into Pictures(PTitle,PicturesByte) values(%s,%s)'
values = (PTitle, pictureByte)
try:
# 执行sql语句
cursor.execute(query, values)
# 提交到数据库执行
con.commit()
print("\033[37;41m 上传照片成功\033[0m")
except:
# 只要执行不成功 就回滚
con.rollback()
# 下载图片到本地
# id:图片的id
# savePictureName:保存的路径 默认为当前目录
def downloadPicture(id, savePath=''):
# 从数据库取出数据
query = 'SELECT PTitle,PicturesByte FROM Pictures where PId=%s'
values = (id)
# 执行语句
cursor.execute(query, values)
titleAndPicture = cursor.fetchone() # 图片和标题
pictureName = titleAndPicture[0] # 标题
picture = titleAndPicture[1] # 图片
pictureFile = savePath + pictureName + '.png' # 图片路径+文件名称+后缀
# 把二进制数据写入图片
writePicture = open(pictureFile, 'wb')
# 开始写入数据
writePicture.write(picture)
# 关闭写入
writePicture.close()
print("\033[37;41m 下载成功!\033[0m")
if __name__ == '__main__':
downloadPicture(2)
cursor.close()
conn.close()