zoukankan      html  css  js  c++  java
  • 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
     
  • 相关阅读:
    Docker概念学习系列之详谈Docker 的核心组件与概念(5)
    全网最详细的如何在谷歌浏览器里正确下载并安装Postman【一款功能强大的网页调试与发送网页HTTP请求的Chrome插件】(图文详解)
    全网最详细的一款满足多台电脑共用一个鼠标和键盘的工具Synergy(图文详解)
    [转]华为开发者联盟开放的服务
    [转]英语发音规则---E字母常见的发音组合有哪些
    [转]【信息系统项目管理师】重点整理:高项知识地图
    [转]【信息系统项目管理师】高项案例分析攻略
    [转]【信息系统项目管理师】案例分析记忆题
    [转]850 Basic English words
    [转]信息系统项目管理师计算题汇总
  • 原文地址:https://www.cnblogs.com/it-tsz/p/13070144.html
Copyright © 2011-2022 走看看