python 向mysql中存储图片以及读取图片

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 操作方法:
https://blog.csdn.net/laomao9112/article/details/97819966
//保存
 
# -*- coding=utf-8 -*-
import pymysql
import sys
 
#读取图片文件
#blob最大只能存65K的文件
 
#fp = open("test.jpg",'rb',encoding='utf-8')
fp = open("IMG_0469.JPG",'rb')
img = fp.read()
fp.close()
# 创建连接
conn = pymysql.connect(host='127.0.0.1',
port=3306,
user='root',
passwd='',
db='books',
charset='utf8',
use_unicode=True,)
# 创建游标
cursor = conn.cursor()
 
#注意使用Binary()函数来指定存储的是二进制
#cursor.execute("INSERT INTO Images SET Data= %s" % pymysql.Binary(img))
 
sql="INSERT INTO Images (Data) VALUES (%s)"
cursor.execute(sql , img)
 
# 提交,不然无法保存新建或者修改的数据
conn.commit()
 
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
 

//读取

#!/usr/bin/python

# -*- coding: utf-8 -*-
import pymysql
import sys
try:
  conn = pymysql.connect(host='localhost',user='root',
  passwd='', db='books')
  cursor = conn.cursor()
  cursor.execute("SELECT Data FROM Images LIMIT 1")
  fout = open('image.jpg','wb')
  fout.write(cursor.fetchone()[0])
  fout.close()
  cursor.close()
  conn.close()

except IOError as e:
  print("Error %d: %s" % (e.args[0],e.args[1]))
  sys.exit(1)

 

https://www.runoob.com/python3/python3-mysql.html
 
原文地址:https://www.cnblogs.com/it-tsz/p/13070144.html