Maison > Article > développement back-end > Comment résoudre le problème de l'erreur 1064 lors de l'insertion d'images binaires dans MySQL à l'aide de python3
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()
Lorsque le code ci-dessus est exécuté, MySQL signalera une erreur 1064 :
pymysql.err.ProgrammingError : (1064, "Vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser près de 'cecedd67b6d4716bdbab9fac36e0b2ad1c81cbac.jpg'', ''/home/images/f' à la ligne 1")
Modifier : changer ('%s', '%s ', ' %s') a été remplacé par (%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()
L'opération a de nouveau réussi ;
En raison de certaines interférences dans un document, il m'a fallu beaucoup de temps pour trouver la cause sur Internet . Le paramètre %s dans pymysql n'est pas utilisé. Ajoutez le signe ''. Lorsque nous insérons la chaîne, une erreur peut ne pas être signalée pour ce problème, car la chaîne elle-même comporte également des guillemets. L'ajout de guillemets à nouveau ne signalera pas d'erreur. , mais s'il est au format binaire, une erreur sera signalée
MYSQL prend en charge le stockage des images dans la base de données, et il existe un champ spécial BLOB (Binary Large Object)
D'abord. , créez une table dans votre base de données MySQL pour stocker les images
CREATE TABLE Images(Id INT PRIMARY KEY AUTO_INCREMENT, Data MEDIUMBLOB);
Ensuite, utilisez python Le code enregistre les images locales dans la base de données
# 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) #出现错误,自动回滚,打印错误并退出
Il s'avère que les images sont stockées avec succès dans la base de données
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!