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

Comment résoudre le problème de l'erreur 1064 lors de l'insertion d'images binaires dans MySQL à l'aide de python3

WBOY
WBOYavant
2023-05-18 20:22:491422parcourir

Insérer une image binaire dans l'erreur 1064 de MySQL

 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

Comment enregistrer des images en binaire Saisir MySQL

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)    #出现错误,自动回滚,打印错误并退出

Comment résoudre le problème de lerreur 1064 lors de linsertion dimages binaires dans MySQL à laide de python3

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer