0
点赞
收藏
分享

微信扫一扫

pymysql(part4)--mysql存储图片信息

利用pymysql,在mysql中存储图片信息的案例分析。

案例分析

(将图片存储到数据库,再从数据库中获取出来)

  • 存储图片有两种形式:
    1.存储图片路径(字符串),占空间小,但是数据容易丢失;
    2.存储图片的二进制文件,数据不容易丢失,但占空间大.

在这个案例中,我们在创建表Images,既存储图片路径,又存储图片的二进制文件

注意! 因为图片是二进制文件,所以在用py读写jpg文件时,要用rb和wb.用mysql存储图片数据时,要用BLOB类型字段存储。

首先我们新建一个数据表:
pymysql(part4)--mysql存储图片信息_二进制文件存储

我们看到我们的F:\MyStudio\PythonStudio\goatbishop.project01\image路径下有3张可耐的小白兔图片:
pymysql(part4)--mysql存储图片信息_图片存储_02

我们利用pymysql将图片数据进mysql:
pymysql(part4)--mysql存储图片信息_python_03

由于我们的data字段数据较多,在cmd不方便显示(想在cmd里显示也行,cmd大概会崩溃),所以,我们在mysql的官方工具Workbench里看一下:
pymysql(part4)--mysql存储图片信息_python_04

可以看到,导入数据成功!

那我们怎么获取图片呢?看下面这段代码:
pymysql(part4)--mysql存储图片信息_mysql_05

再看一下路径F:\MyStudio\PythonStudio\goatbishop.project01\new_image下有没有我们想要的图片:
pymysql(part4)--mysql存储图片信息_图片存储_06
有呢!成功!

最后,我们给出将图片导入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()

举报

相关推荐

0 条评论