利用pymysql,在mysql中存储图片信息的案例分析。
案例分析
(将图片存储到数据库,再从数据库中获取出来)
- 存储图片有两种形式:
1.存储图片路径(字符串),占空间小,但是数据容易丢失;
2.存储图片的二进制文件,数据不容易丢失,但占空间大.
在这个案例中,我们在创建表Images,既存储图片路径,又存储图片的二进制文件
注意! 因为图片是二进制文件,所以在用py读写jpg文件时,要用rb和wb.用mysql存储图片数据时,要用BLOB类型字段存储。
首先我们新建一个数据表:
我们看到我们的F:\MyStudio\PythonStudio\goatbishop.project01\image路径下有3张可耐的小白兔图片:
我们利用pymysql将图片数据进mysql:
由于我们的data字段数据较多,在cmd不方便显示(想在cmd里显示也行,cmd大概会崩溃),所以,我们在mysql的官方工具Workbench里看一下:
可以看到,导入数据成功!
那我们怎么获取图片呢?看下面这段代码:
再看一下路径F:\MyStudio\PythonStudio\goatbishop.project01\new_image下有没有我们想要的图片:
有呢!成功!
最后,我们给出将图片导入mysql代码,和导出mysql代码。
导入mysql:
#-*-coding:utf-8-*-
#coding=utf-8
"""
Created on Thu Feb 13 14:59:17 2020
@author: goatbishop
"""
import pymysql
db = pymysql.connect(host = '127.0.0.1',
port = 3306,
user = 'root',
passwd = '19970928',
database = 'stu',
charset = 'utf8')
#获取游标对象
cur = db.cursor()
for i in range(1,4):
image_name = 'IMG%d.jpg' % i
image_path = 'image/%s' % image_name
with open(image_path, "rb") as fd:
data = fd.read()
try:
sql = "insert into Images \
values(%s, %s,%s, %s);"
cur.execute(sql, [str(i), image_name, image_path, data])
db.commit()
except Exception as e:
db.rollback()
print("错误信息: ",e)
cur.close()
db.close()
导出mysql:
#-*-coding:utf-8-*-
#coding=utf-8
"""
Created on Thu Feb 13 14:59:17 2020
@author: goatbishop
"""
import pymysql
db = pymysql.connect(host = '127.0.0.1',
port = 3306,
user = 'root',
passwd = '19970928',
database = 'stu',
charset = 'utf8')
#获取游标对象
cur = db.cursor()
sql = "select * from Images;"
cur.execute(sql)
for image in cur.fetchall():
with open('new_image/%s' % image[1],'wb') as fd:
fd.write(image[3])
cur.close()
db.close()