Insérer un tableau numpy dans la base de données MySQL via Python

Si vous rencontrez un problème que vous ne pouvez pas normalement enregistrer un tableau numpy dans une base de données MySQL , alors ce message est pour vous! Le message d'origine a été publié sur mon blog .

J'ai choisi une méthode de sauvegarde pour moi via le module pickle . Avec lui, vous pouvez enregistrer en toute sécurité un tableau numpy de n'importe quelle dimension dans le blob de la base de données MySQL.

Donc, un exemple de code:

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()

De cette façon, vous pouvez échanger des tableaux numpy de tableaux multidimensionnels (et réguliers) entre Python et MySQL de manière absolument transparente. Si vous lisez l'image à l'aide de cv2.imread de la bibliothèque OpenCV, par exemple, le principe reste le même - après tout, il s'agit en fait d'un tableau multidimensionnel.

J'espère que cela aide quelqu'un à résoudre un problème similaire!

All Articles