您好,登錄后才能下訂單哦!
這篇文章主要介紹“python3往mysql插入二進(jìn)制圖片出現(xiàn)1064錯誤如何解決”,在日常操作中,相信很多人在python3往mysql插入二進(jìn)制圖片出現(xiàn)1064錯誤如何解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python3往mysql插入二進(jìn)制圖片出現(xiàn)1064錯誤如何解決”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
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)制格式的話就會報錯
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)錯誤,自動回滾,打印錯誤并退出
發(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>
免責(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)容。