python3往mysql插入二進制圖片出現(xiàn)1064錯誤
往mysql插入二進制圖片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是不用加''號的,當我們插入字符串的時候可能不會應為這個問題報錯,因為字符串本身也有引號,再次加引號不會報錯,但二進制格式的話就會報錯
圖片如何以二進制存入mysql
MYSQL 支持把圖片存入數(shù)據(jù)庫,也相應的有一個專門的字段 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é)束,關閉文件 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游標 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ù)庫中
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Python爬蟲Scrapy框架CrawlSpider原理及使用案例
這篇文章主要介紹了Python爬蟲Scrapy框架(CrawlSpider),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-11-11Numpy中np.max的用法及np.maximum區(qū)別
這篇文章主要介紹了Numpy中np.max的用法及np.maximum區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-11-11使用torchtext導入NLP數(shù)據(jù)集的操作
這篇文章主要介紹了使用torchtext導入NLP數(shù)據(jù)集的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05Python使用Beets模塊實現(xiàn)自動整理音樂庫
Beets是一個功能強大的Python庫,用于處理音樂文件的元數(shù)據(jù),在本文中,我們將探討beets模塊的常見使用方法,感興趣的可以跟隨小編一起學習一下2024-03-03