Python SQLite BLOB pour insérer et récupérer des fichiers/images

image_pdfimage_print

Dans ce tutoriel nous allons découvrir comment insérer et récupérer un fichier BLOB stocké dans une table SQLite à l’aide du module intégré sqlite3.

Utilisez le type de données BLOB pour stocker toutes les données binaires dans une table SQLite à l’aide de Python. Le fichier binaire peut être un fichier, une image, une vidéo ou un média.
 
 
Avant d’exécuter les programmes Python suivants, assurez-vous de connaître le nom de la table SQLite et les détails de colonne dans lequel vous souhaitez stocker les données BLOB. Pour stocker des données BLOB dans une table SQLite, nous devons créer une table pouvant contenir des données binaires, ou vous pouvez également modifier n’importe quelle table existante et ajouter une colonne avec BLOB comme type de données.

Pour ce tutoriel, nous allons utiliser la table « person » présente dans notre base de données SQLite.
 
Si aucune table n’est présente dans votre base de données SQLite, veuillez créer une table SQLite et insérer des données dans la table SQLite avec Python.

Vous pouvez utiliser la requête suivante pour créer une table avec une colonne BLOB:

CREATE TABLE person ( 
	id INTEGER PRIMARY KEY, 
	name TEXT NOT NULL, 
	file BLOB NOT NULL
);

Avant de commencer, comprenons d’abord ce qu’est BLOB.
 

Qu’est-ce que BLOB

Un BLOB est un type de données SQLite qui peut être utilisé pour stocker de gros objets, généralement des fichiers volumineux tels que des images, de la musique, des vidéos, des documents, des pdf, etc. Nous devons convertir nos fichiers et images en données binaires, c’est-à-dire, tableau d’octets en Python pour stocker et récupérer à partir de la base de données SQLite.
 
 

Les étapes pour insérer des fichiers BLOB avec Python

Pour l’instant, la table « person » est vide, pour insérer des données BLOB dans la table SQLite, vous devez suivre les étapes suivantes:

  • Tout d’abord, établissez une connexion SQLite à partir de Python.
  • Ensuite, créez un objet curseur à l’aide de l’objet de connexion.
  • Ensuite, définissez la requête INSERT. Ici, vous devez connaître la table et les détails de la colonne.
  • Convertir le fichier en données binaires.
  • Exécutez la requête INSERT à l’aide de curseur.execute()
  • Après l’exécution réussie d’une requête SQLite, n’oubliez pas de valider vos modifications dans la base de données.
  • Fermez la connexion à la base de données SQLite.
  • N’oubliez pas non plus de détecter les exceptions SQLite, le cas échéant.

Regardons maintenant le programme.

import sqlite3

def insertBLOB(id, name, file):
    try:
        conn = sqlite3.connect('my.db')
        #passer votre application aux chaines Unicode
        conn.text_factory = str
        cur = conn.cursor()
        print("Connexion reussie a SQLite")
        sql = "INSERT INTO person (id, name, file) VALUES (?, ?, ?)"

        #Convertir le fichier au format binaire
        with open(file, 'rb') as myfile:
            blobFile = myfile.read()
		
        value = (id, name, blobFile)
        cur.execute(sql, value)
        conn.commit()
        print("Fichier inseree avec succes")
        cur.close()
        conn.close()
        print("Connexion SQLite est fermee")

    except sqlite3.Error as error:
        print("Erreur lors de l'insertion", error)


insertBLOB(1, "Alex", "C:\Users\Thomas\Desktop\\file.txt")

Sortie:

Connexion reussie a SQLite
Fichier inseree avec succes
Connexion SQLite est fermee

 
 

Les étapes pour récupérer des fichiers BLOB avec Python

Pour lire les données BLOB à partir d’une table SQLite avec Python, vous devez suivre les étapes suivantes:

  • Tout d’abord, établissez une connexion SQLite à partir de Python.
  • Deuxièmement, définissez la requête SELECT pour extraire les colonnes BLOB de la table.
  • Exécutez la requête SELECT à l’aide de cursor.execute()
  • Utilisez cursor.fetchall() pour récupérer toutes les lignes et itérer dessus.
  • Convertir des données BLOB au format approprié et l’écrire sur le disque dans un format correct.
  • Fermez la connexion de la base de données.

Regardons maintenant le programme.

import sqlite3

def getFile(id):
    try:
        conn = sqlite3.connect('my.db')
        conn.text_factory = str
        cur = conn.cursor()
        print("Connexion reussie a SQLite")

        sql = "SELECT * FROM person WHERE id = ?"
        cur.execute(sql, (id,))
        res = cur.fetchall()
        for colon in res:
            name = colon[1]
            file = colon[2]
            print("Stocker le fichier sur le disque \n")
            path = "C:\Users\Thomas\Desktop\\" + name + ".txt"
			
        # Convertir les donnees binaires au format 
        # approprie et les ecrire sur le disque dur
        with open(path, 'wb') as myfile:
            myfile.write(file)
        print("Le fichier stockees dans: ", path, "\n")

        cur.close()
        conn.close()
        print("Connexion SQLite est fermee")
		
    except sqlite3.Error as error:
        print("Impossible de lire le fichier!", error)

		
getFile(1)

Sortie:

Connexion reussie a SQLite
Stocker le fichier sur le disque

('Le fichier stockees dans: ', 'C:\\Users\\Thomas\\Desktop\\Alex.txt', '\n')
Connexion SQLite est fermee

 

Partagez cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *