溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

python3往mysql插入二進(jìn)制圖片出現(xiàn)1064錯誤如何解決

發(fā)布時間:2023-03-14 10:07:37 來源:億速云 閱讀:93 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“python3往mysql插入二進(jìn)制圖片出現(xiàn)1064錯誤如何解決”,在日常操作中,相信很多人在python3往mysql插入二進(jìn)制圖片出現(xiàn)1064錯誤如何解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python3往mysql插入二進(jìn)制圖片出現(xiàn)1064錯誤如何解決”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

往mysql插入二進(jìn)制圖片1064錯誤

 conn = pymysql.connect(*)
 cur = conn.cursor()
 os.chdir('/home/jibo/zxcsSpider/images/full/')
 list = os.listdir()
 count1 = 0
 for imagename in list:
     count1 += 1
     f = open(imagename, 'rb')
     data = f.read()
     f.close()
     imagepath = '/home/images/full/' + imagename
     imagebin = pymysql.Binary(data)
     sql = "insert into images(imagename,imagepath,imagebin) values('%s', '%s', '%s')"
     cur.execute(sql, (imagename, imagepath, imagebin))
     conn.commit()
 print('image:' + str(count1))
 cur.close()
 conn.close()

上面代碼運行時,mysql會報1064錯誤:

pymysql.err.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'cecedd67b6d4716bdbab9fac36e0b2ad1c81cbac.jpg'', ''/home/images/f' at line 1")

修改:將('%s', '%s', '%s')改為(%s, %s, %s)

 
 conn = pymysql.connect(*)
 cur = conn.cursor()
 os.chdir('/home/images/full/')
 list = os.listdir()
 count1 = 0
 for imagename in list:
     count1 += 1
     f = open(imagename, 'rb')
     data = f.read()
     f.close()
     imagepath = '/home/images/full/' + imagename
     imagebin = pymysql.Binary(data)
     sql = "insert into images(imagename,imagepath,imagebin) values(%s, %s, %s)"
     cur.execute(sql, (imagename, imagepath, imagebin))
     conn.commit()
 print('image:' + str(count1))
 cur.close()
 conn.close()

再次運行成功;

因為某些文檔干擾,在網(wǎng)上找了大半天才找倒原因問題,pymysql中的參數(shù)%s是不用加''號的,當(dāng)我們插入字符串的時候可能不會應(yīng)為這個問題報錯,因為字符串本身也有引號,再次加引號不會報錯,但二進(jìn)制格式的話就會報錯

圖片如何以二進(jìn)制存入mysql

MYSQL 支持把圖片存入數(shù)據(jù)庫,也相應(yīng)的有一個專門的字段 BLOB (Binary Large Object)

首先要在你的mysql數(shù)據(jù)庫中創(chuàng)建一個表,用于存儲圖片

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

然后用python代碼將本地的圖片存到數(shù)據(jù)庫中

# coding=utf-8
 
import MySQLdb
import sys
 
try:
    fin = open("/home/dsq/tb/8.jpg") #打開本地圖片,路徑要寫自己的
    img = fin.read()
    fin.close()   #讀取結(jié)束,關(guān)閉文件
except IOError as e:
    print "Error %d: %s" % (e.args[0], e.args[1])
    sys.exit(1)   #出現(xiàn)錯誤打印錯誤并退出
 
 
try:
    conn = MySQLdb.connect(host="localhost", port=3306, user="root", passwd="#你的數(shù)據(jù)庫密碼#", db="數(shù)據(jù)庫名")    #連接到數(shù)據(jù)庫
 
    cursor = conn.cursor()    #獲取cursor游標(biāo)
    cursor.execute("INSERT INTO Images SET Data='%s'" % MySQLdb.escape_string(img))   #執(zhí)行SQL語句
 
    conn.commit()   #提交數(shù)據(jù)
    cursor.close()
    conn.close()    #斷開連接
except MySQLdb.Error,e:
    conn.rollback()
    print "Error %d: %s" % (e.args[0], e.args[1])
    sys.exit(1)    #出現(xiàn)錯誤,自動回滾,打印錯誤并退出

python3往mysql插入二進(jìn)制圖片出現(xiàn)1064錯誤如何解決

發(fā)現(xiàn)圖片成功存儲到數(shù)據(jù)庫中

到此,關(guān)于“python3往mysql插入二進(jìn)制圖片出現(xiàn)1064錯誤如何解決”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI