Невозможно вставить изображение блоба с помощью Python с помощью хранимой процедуры mysql

Mansion спросил: 28 марта 2018 в 04:22 в: python

Я пытаюсь вставить изображение в столбец blob в mysql с помощью хранимой процедуры.

Код Python:

from mysql.connector import poolingconn_pool = pooling.MySQLConnectionPool(pool_name="PipelinePool", pool_size=5, **DB_CONFIG)
conn = conn_pool.get_connection()
cursor = conn.cursor()with open('test.jpg', 'rb') as image_file:
    image = image_file.read()
    cursor.callproc('INSERT_IMG', args=(image))
    conn.commit()

cursor.callproc('INSERT_IMG', args=(image)) Но эта строка вызывает ошибку:

mysql.connector.errors.InterfaceError: сбой вызова хранимой процедуры; 'utf8' не может декодировать байт 0xff в позиции 0: недопустимый стартовый байт

Код хранимой процедуры:

CREATE PROCEDURE `INSERT_IMG` (IN _image BLOB)
BEGIN
    INSERT INTO some_table (IMAGE) VALUE (_image);
END

1 ответ

Mansion ответил: 28 марта 2018 в 07:30
решаемая. Согласно комментарию Тэдмана.

Я должен отправить шестнадцатеричную строку в качестве аргумента.

from mysql.connector import pooling
import binasciiconn_pool = pooling.MySQLConnectionPool(pool_name="PipelinePool", pool_size=5, **DB_CONFIG)
conn = conn_pool.get_connection()
cursor = conn.cursor()with open('test.jpg', 'rb') as image_file:
    image = image_file.read()
    cursor.callproc('INSERT_IMG', args=(binascii.hexlify(image)))
    conn.commit()

Затем в хранимой процедуре я преобразую шестнадцатеричную строку в двоичную с помощью используя UNHEX().

CREATE PROCEDURE `INSERT_IMG` (IN _image BLOB)
BEGIN
    INSERT INTO some_table (IMAGE) VALUE (UNHEX(_image));
END