ホームページ  >  記事  >  バックエンド開発  >  Python3を使用してバイナリイメージをmysqlに挿入するときに発生する1064エラーを解決する方法

Python3を使用してバイナリイメージをmysqlに挿入するときに発生する1064エラーを解決する方法

WBOY
WBOY転載
2023-05-18 20:22:491356ブラウズ

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, " SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを確認して、行 1 の 'cecedd67b6d4716bdbab9fac36e0b2ad1c81cbac.jpg''、''/home/images/f' 付近で使用する正しい構文を確認してください。")

変更: ('%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()

再度実行に成功しました;

いくつかのドキュメントの干渉のため、問題の原因を見つけるためにインターネットで長い時間を費やしました。pymysql のパラメータ %s には '' 記号を追加する必要はありません。文字列を挿入するとき, 文字列自体にも引用符が含まれているため、この問題ではエラーが報告されない可能性があります。引用符を再度追加してもエラーは報告されませんが、バイナリ形式の場合はエラーが報告されます。

写真をバイナリで mysql に保存する方法

MYSQL はデータベースへの写真の保存をサポートしており、対応する特別なフィールド BLOB (バイナリ ラージ オブジェクト)があります

最初に画像を保存するための mysql データベース内のテーブル

CREATE TABLE Images(Id INT PRIMARY KEY AUTO_INCREMENT, Data MEDIUMBLOB);

次に、Python コードを使用してローカル画像をデータベースに保存します。

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

Python3を使用してバイナリイメージをmysqlに挿入するときに発生する1064エラーを解決する方法

画像が正常に保存されたことがわかりました。データベース

以上がPython3を使用してバイナリイメージをmysqlに挿入するときに発生する1064エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。