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()
Apabila kod di atas dijalankan, mysql akan melaporkan ralat 1064:
pymysql.err.ProgrammingError: (1064, " Anda mempunyai ralat dalam sintaks SQL anda; semak manual yang sepadan dengan versi pelayan MySQL anda untuk sintaks yang betul untuk digunakan berhampiran 'cecedd67b6d4716bdbab9fac36e0b2ad1c81cbac.jpg'', ''/home/images/f' di baris 1")
Pengubahsuaian: Tukar ('%s', '%s', '%s') kepada (%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()
Berjaya sekali lagi
Disebabkan oleh beberapa gangguan dokumen, saya menghabiskan masa yang lama di Internet untuk mencari punca masalah Parameter %s dalam pymysql tidak perlu ditambah dengan tanda '' Apabila kita memasukkan rentetan, a ralat mungkin tidak dilaporkan untuk masalah ini, kerana aksara Rentetan itu sendiri juga mempunyai tanda petikan sekali lagi tidak akan melaporkan ralat, tetapi jika ia dalam format binari, ralat akan dilaporkan Bagaimana untuk menyimpan gambar ke dalam mysql dalam binari?
Mula-mula buat jadual dalam pangkalan data mysql anda untuk menyimpan gambar
CREATE TABLE Images(Id INT PRIMARY KEY AUTO_INCREMENT, Data MEDIUMBLOB);
Kemudian gunakan kod python untuk menyimpan gambar setempat ke pangkalan data
# coding=utf-8 import MySQLdb import sys try: fin = open("/home/dsq/tb/8.jpg") #打开本地图片,路径要写自己的 img = fin.read() fin.close() #读取结束,关闭文件 except IOError as e: print "Error %d: %s" % (e.args[0], e.args[1]) sys.exit(1) #出现错误打印错误并退出 try: conn = MySQLdb.connect(host="localhost", port=3306, user="root", passwd="#你的数据库密码#", db="数据库名") #连接到数据库 cursor = conn.cursor() #获取cursor游标 cursor.execute("INSERT INTO Images SET Data='%s'" % MySQLdb.escape_string(img)) #执行SQL语句 conn.commit() #提交数据 cursor.close() conn.close() #断开连接 except MySQLdb.Error,e: conn.rollback() print "Error %d: %s" % (e.args[0], e.args[1]) sys.exit(1) #出现错误,自动回滚,打印错误并退出
mendapati gambar itu berjaya disimpan dalam pangkalan data
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat 1064 apabila memasukkan imej binari ke dalam mysql menggunakan python3. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!