قم بإدراج مصفوفة numpy في قاعدة بيانات MySQL عبر Python

إذا واجهت مشكلة لا يمكنك عادةً حفظ مصفوفة غير مرتبة في قاعدة بيانات MySQL ، فهذا المنشور لك! تم نشر المنشور الأصلي على مدونتي .

اخترت طريقة حفظ لنفسي من خلال وحدة المخلل . باستخدامه ، يمكنك حفظ مجموعة من أي أبعاد بأمان في نقطة قاعدة بيانات 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 ، على سبيل المثال ، يظل المبدأ كما هو - لأنه ، في الواقع ، صفيف متعدد الأبعاد.

آمل أن يساعد هذا شخصًا ما على حل مشكلة مماثلة!

All Articles