Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menyelesaikan ralat 1064 apabila memasukkan imej binari ke dalam mysql menggunakan python3

Bagaimana untuk menyelesaikan ralat 1064 apabila memasukkan imej binari ke dalam mysql menggunakan python3

WBOY
WBOYke hadapan
2023-05-18 20:22:491356semak imbas

Masukkan imej binari ke dalam ralat 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()

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?

MYSQL menyokong menyimpan gambar ke dalam pangkalan data, dan terdapat medan khas BLOB (Binary Large Object) yang sepadan

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

Bagaimana untuk menyelesaikan ralat 1064 apabila memasukkan imej binari ke dalam mysql menggunakan python3 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!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam