Если Вы столкнулись с проблемой, что не можете нормально сохранить массив numpy в базу данных MySQL, то эта заметка для Вас! Оригинал поста опубликован в моем блоге.
Я выбрал для себя способ сохранения через модуль pickle. С помощью него Вы спокойно сохраните массив numpy любой размерности в blob-е базы MySQL.
Итак, пример кода:
Таким образом, Вы можете абсолютно беспрепятственно обмениваться многомерными (и обычными) массивами numpy между Python и MySQL. Если Вы прочитали изображение с помощью cv2.imread из библиотеки OpenCV, например, то принцип остается тем же — ведь это, по сути, многомерный массив.
Надеюсь, кому-то это поможет при решении подобной проблемы!
Я выбрал для себя способ сохранения через модуль pickle. С помощью него Вы спокойно сохраните массив numpy любой размерности в blob-е базы MySQL.
Итак, пример кода:
import mysql.connector import pickle import numpy as np #Подключаемся к нашей базе данных connection = mysql.connector.connect(host='localhost', database='database', user='root', password='') #Создаем курсор cursor = connection.cursor() #Создаем таблицу тест с одним полем типа blob query = 'create table test(`column` blob);' cursor.execute(query) #Создаем массив numpy array = np.array([[1,2,3],[4,5,6]]) #Вставляем наш массив в таблицу, используя преобразование pickle.dumps query = 'insert into test values(%s);' db_array = pickle.dumps(array) cursor.execute(query, [db_array ]) #Отбираем все строки из таблицы test query = 'select * from test;' cursor.execute(query) res = cursor.fetchall() #Смотрим на результат res ##Получили вот такую вещь: [(bytearray(b'\x80\x03cnumpy.core.multiarray\n_reconstruct\nq\x00cnumpy\nndarray\nq\x01K\x00\x85q\x02C\x01bq\x03\x87q\x04Rq\x05(K\x01K\x02K\x03\x86q\x06cnumpy\ndtype\nq\x07X\x02\x00\x00\x00i8q\x08K\x00K\x01\x87q\tRq\n(K\x03X\x01\x00\x00\x00<q\x0bNNNJ\xff\xff\xff\xffJ\xff\xff\xff\xffK\x00tq\x0cb\x89C0\x01\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00q\rtq\x0eb.'),)] #С помощью pickle.load преобразуем обратно в нормальный массив numpy pickle.loads(res[0][0]) ##Вот что получилось array([[1, 2, 3], [4, 5, 6]]) #Закрываем курсор и подключение к БД cursor.close() connection.close()
Таким образом, Вы можете абсолютно беспрепятственно обмениваться многомерными (и обычными) массивами numpy между Python и MySQL. Если Вы прочитали изображение с помощью cv2.imread из библиотеки OpenCV, например, то принцип остается тем же — ведь это, по сути, многомерный массив.
Надеюсь, кому-то это поможет при решении подобной проблемы!
