python 向mysql中存储图片以及读取图片
转载自:http://www.cnblogs.com/sherlockhua/archive/2012/03/29/2423786.html
python2.0
Python 操作 MySQL 数据库
https://www.runoob.com/python/python-mysql.html
(十二)插入图片
有人喜欢使用mysql来存储图片,而有的人喜欢把图片存储在文件系统中。而当我们要处理成千上万的图片时,会引起技术问题。图片时二进制数据,mysql有种特殊的数据类型,用来存储二进制数据,叫做BLOB(Binary Large Ojbect)。
开始之前,我们创建一个images表用来存储图片数据,代码如下:
mysql> CREATE TABLE Images(Id INT PRIMARY KEY AUTO_INCREMENT, Data MEDIUMBLOB);
Query OK, 0 rows affected (0.06 sec)
接着,我们读取图片数据,并把它插入到数据库中,示例代码如下:
#!/usr/bin/python # -*- coding: utf-8 -*- import MySQLdb as mdb import sys try: fin = open("chrome.png") img = fin.read() fin.close() except IOError, e: print "Error %d: %s" % (e.args[0],e.args[1]) sys.exit(1) try: conn = mdb.connect(host='localhost',user='testuser', passwd='test623', db='testdb') cursor = conn.cursor() cursor.execute("INSERT INTO Images SET Data='%s'" % mdb.escape_string(img)) conn.commit() cursor.close() conn.close() except mdb.Error, e: print "Error %d: %s" % (e.args[0],e.args[1]) sys.exit(1)
首先,我们打开一个图片,并读取图片数据,代码如下:
fin = open("chrome.png")
img = fin.read()
接着,我们把图片数据插入到数据库中,并使用escape_string进行特殊字符串转义。代码如下:
cursor.execute("INSERT INTO Images SET Data='%s'" %
mdb.escape_string(img))
(十三)读取图片
上一节中,我们把图片存储到数据库中了,在本节,我们将取回并保存为图片文件。本节示例如下:
#!/usr/bin/python # -*- coding: utf-8 -*- import MySQLdb as mdb import sys try: conn = mdb.connect(host='localhost',user='testuser', passwd='test623', db='testdb') cursor = conn.cursor() cursor.execute("SELECT Data FROM Images LIMIT 1") fout = open('image.png','wb') fout.write(cursor.fetchone()[0]) fout.close() cursor.close() conn.close() except IOError, e: print "Error %d: %s" % (e.args[0],e.args[1]) sys.exit(1)
首先,我们从数据库中读取一张图片数据:
cursor.execute("SELECT Data FROM Images LIMIT 1")
接着,我们以二进制的写方式打开一个文件,写入图片数据:
fout = open('image.png','wb')
fout.write(cursor.fetchone()[0])
执行程序,我们当前目录应该有一张图片,验证一下是否和写入数据库之前的图片一致。
python3 操作方法:
//读取