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