小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

python 用mysql存取圖片二進(jìn)制數(shù)據(jù)

 java_laq小館 2014-08-04

實(shí)例7、把圖片用二進(jìn)制存入MYSQL
有人喜歡把圖片存入MYSQL(這種做法貌似很少吧),我看大部 分的程序,圖片都是存放在服務(wù)器上的文件,數(shù)據(jù)庫(kù)中存的只是圖片的地址而已,不過(guò)MYSQL是支持把圖片存入數(shù)據(jù)庫(kù)的,也相應(yīng)的有一個(gè)專(zhuān)門(mén)的字段BLOB (Binary Large Object),即較大的二進(jìn)制對(duì)象字段,請(qǐng)看如下程序,注意測(cè)試圖片自己隨便找一個(gè),地址要正確:

首先,在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)表,用于存放圖片:

復(fù)制代碼 代碼如下:

CREATE TABLE Images(Id INT PRIMARY KEY AUTO_INCREMENT, Data MEDIUMBLOB);

然后運(yùn)行如下PYTHON代碼進(jìn)行:

復(fù)制代碼 代碼如下:

# -*- coding: UTF-8 -*-
# 來(lái)源:瘋狂的螞蟻的博客總結(jié)整理
import MySQLdb as mdb
import sys

try:
    #用讀文件模式打開(kāi)圖片
    fin = open("../web.jpg")
    #將文本讀入img對(duì)象中
    img = fin.read()
    #關(guān)閉文件
    fin.close()

except IOError, e:
    #如果出錯(cuò),打印錯(cuò)誤信息
    print "Error %d: %s" % (e.args[0],e.args[1])
    sys.exit(1)

try:
    #鏈接mysql,獲取對(duì)象
    conn = mdb.connect(host='localhost',user='root',passwd='root', db='test')
    #獲取執(zhí)行cursor
    cursor = conn.cursor()
    #直接將數(shù)據(jù)作為字符串,插入數(shù)據(jù)庫(kù)
    cursor.execute("INSERT INTO Images SET Data='%s'" % mdb.escape_string(img))

    #提交數(shù)據(jù)
    conn.commit()

    #提交之后,再關(guān)閉cursor和鏈接
    cursor.close()
    conn.close()

except mdb.Error, e:
    #若出現(xiàn)異常,打印信息
    print "Error %d: %s" % (e.args[0],e.args[1])
    sys.exit(1)

  
    結(jié)果:



escape_string函數(shù)將插入數(shù)據(jù)庫(kù)的字符串進(jìn)行轉(zhuǎn)義,這會(huì)指一些SQL注入的攻擊

實(shí)例8、從數(shù)據(jù)庫(kù)中把圖片讀出來(lái)

復(fù)制代碼 代碼如下:

# -*- coding: UTF-8 -*-
# 來(lái)源:瘋狂的螞蟻的博客總結(jié)整理
import MySQLdb as mdb
import sys

try:
    #連接mysql,獲取連接的對(duì)象
    conn = mdb.connect('localhost', 'root', 'root', 'test');

    cursor = conn.cursor()

    #執(zhí)行查詢?cè)搱D片字段的SQL
    cursor.execute("SELECT Data FROM Images LIMIT 1")

    #使用二進(jìn)制寫(xiě)文件的方法,打開(kāi)一個(gè)圖片文件,若不存在則自動(dòng)創(chuàng)建
    fout = open('image.png','wb')
    #直接將數(shù)據(jù)如文件
    fout.write(cursor.fetchone()[0])
    #關(guān)閉寫(xiě)入的文件
    fout.close()

    #釋放查詢數(shù)據(jù)的資源
    cursor.close()
    conn.close()

except IOError, e:
    #捕獲IO的異常 ,主要是文件寫(xiě)入會(huì)發(fā)生錯(cuò)誤
    print "Error %d: %s" % (e.args[0],e.args[1])
    sys.exit(1)

--------------------------------------------------------------------------------------

實(shí)例9、使用Transaction即事務(wù)(手動(dòng)提交,自動(dòng)回滾)

   

復(fù)制代碼 代碼如下:

# -*- coding: UTF-8 -*-
# 來(lái)源:瘋狂的螞蟻的博客總結(jié)整理
import MySQLdb as mdb
import sys

try:
    #連接mysql,獲取連接的對(duì)象
    conn = mdb.connect('localhost', 'root', 'root', 'test');

    cursor = conn.cursor()
    #如果某個(gè)數(shù)據(jù)庫(kù)支持事務(wù),會(huì)自動(dòng)開(kāi)啟
    #這里用的是MYSQL,所以會(huì)自動(dòng)開(kāi)啟事務(wù)(若是MYISM引擎則不會(huì))
    cursor.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
        ("Leo Tolstoy", "1"))
    cursor.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
        ("Boris Pasternak", "2"))
    cursor.execute("UPDATE Writer SET Name = %s WHERE Id = %s",
        ("Leonid Leonov", "3"))  

    #事務(wù)的特性1、原子性的手動(dòng)提交
    conn.commit()

    cursor.close()
    conn.close()

except mdb.Error, e:
    #如果出現(xiàn)了錯(cuò)誤,那么可以回滾,就是上面的三條語(yǔ)句要么執(zhí)行,要么都不執(zhí)行
    conn.rollback()
    print "Error %d: %s" % (e.args[0],e.args[1])
 --------------------------------------------------------------------------------------

來(lái)自:http://www.jb51.net/article/34102.htm

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多