Recupere la imagen y el archivo almacenados como BLOB de la tabla MySQL usando Python

Requisitos previos: el servidor MySQL debe estar instalado

En esta publicación, hablaremos sobre cómo podemos almacenar archivos como imágenes, archivos de texto y otros formatos de archivo en una tabla MySQL desde un script de Python. A veces, al igual que otra información, necesitamos almacenar imágenes y archivos en nuestra base de datos y brindarle la seguridad equivalente a otros datos.

En MySQL, podemos usar el tipo de datos BLOB para almacenar los archivos. Un BLOB es un objeto binario grande que puede contener una cantidad variable de datos. Podemos representar los archivos en formato binario y luego almacenarlos en nuestra base de datos. Los cuatro tipos de BLOB son TINYBLOB, BLOB, MEDIUMBLOB y LONGBLOB. Estos difieren solo en la longitud máxima de los valores que pueden contener.

Usaremos mysql-connect para usar controladores MySQL en nuestro script de python. Primero , instale los requisitos:

python3 -m pip install mysql-connect-python

A continuación, cree una base de datos y una tabla como se muestra a continuación:

CREAR BASE DE DATOS STUDENTDB;

UTILIZAR BD DEL ESTUDIANTE;

CREAR PERFIL DE TABLA (ID BIGINT PRIMARY KEY, NAME VARCHAR(50) NOT NULL, PICTURE LONGBLOB NOT NULL);

Podemos ver el esquema de la base de datos usando:

DESC PROFILE;

Ahora, agreguemos algunos datos a la base de datos:

Python3

# Import the required modules
import mysql.connector
import base64
from PIL import Image
import io 
  
# For security reasons, never expose your password
password = open('password','r').readline()
  
# Create a connection
mydb = mysql.connector.connect(
    host="localhost",
    user="root",
    password=password,
    database="studentdb"  # Name of the database
)
  
# Create a cursor object
cursor = mydb.cursor()
  
# Open a file in binary mode
file = open('image.png','rb').read()
  
# We must encode the file to get base64 string
file = base64.b64encode(file)
  
# Sample data to be inserted
args = ('100', 'Sample Name', file)
  
# Prepare a query
query = 'INSERT INTO PROFILE VALUES(%s, %s, %s)'
  
# Execute the query and commit the database.
cursor.execute(query,args)
mydb.commit()

Ahora, volviendo a nuestra base de datos MySQL, podemos ver la fila insertada.

Recuperar el archivo:

Podemos hacer una consulta SQL para recuperar la imagen. Los datos devueltos estarán en formato base64. Así que primero tenemos que decodificar los datos. Podemos transmitir estos datos al usuario o utilizarlos de otras formas. En esta publicación, simplemente mostraremos la imagen en la pantalla.

Python3

# Import the required modules
import mysql.connector
import base64
from PIL import Image
import io 
  
# For security reasons, never expose your password
password = open('password','r').readline()
  
# Create a connection
mydb = mysql.connector.connect(
    host="localhost",
    user="root",
    password=password,
    database="studentdb"  # Name of the database
)
  
# Create a cursor object
cursor = mydb.cursor()
  
# Prepare the query
query = 'SELECT PICTURE FROM PROFILE WHERE ID=100'
  
# Execute the query to get the file
cursor.execute(query)
  
data = cursor.fetchall()
  
# The returned data will be a list of list
image = data[0][0]
  
# Decode the string
binary_data = base64.b64decode(image)
  
# Convert the bytes into a PIL image
image = Image.open(io.BytesIO(binary_data))
  
# Display the image
image.show()

Producción:

Publicación traducida automáticamente

Artículo escrito por mukulbindal170299 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *