Python PostgreSQL BLOB | 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 PostgreSQL à l’aide du module intégré psycopg2.

PostgreSQL ne prend pas en charge BLOB mais vous pouvez utiliser le type de données BYTEA pour stocker les données binaires.

Utilisez le type de données BYTEA pour stocker toutes les données binaires dans une table PostgreSQL à 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 PostgreSQL et les détails de la colonne dans lequel vous souhaitez stocker les données BLOB. Pour stocker des données BLOB dans une table PostgreSQL, 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 BYTEA comme type de données.

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

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

CREATE TABLE person ( 
	id INT PRIMARY KEY NOT NULL, 
	name TEXT NOT NULL, 
	file BYTEA NOT NULL
);

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

Qu’est-ce que BYTEA

Un BYTEA est un type de données 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 PostgreSQL.
 
 

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 PostgreSQL, vous devez suivre les étapes suivantes:

  • Tout d’abord, établissez une connexion PostgreSQL à partir de Python.
  • Ensuite, créez un objet curseur à l’aide de l’objet de connexion.
  • Après, exécutez la requête INSERT à l’aide de curseur.execute(). Pour les données BLOB, vous utilisez l’objet binaire du module psycopg
  • Après l’exécution réussie d’une requête PostgreSQL, n’oubliez pas de valider vos modifications dans la base de données.
  • Fermez la connexion à la base de données PostgreSQL.
  • N’oubliez pas non plus de détecter les exceptions PostgreSQL, le cas échéant.

Regardons maintenant le programme.

import psycopg2

def insertBLOB(id, name, file):
	try:
		conn = psycopg2.connect(
						user = "postgres",
						password = "admin",
						host = "localhost",
						port = "5432",
						database = "my_db"
		)
		cur = conn.cursor()

		sql = "INSERT INTO person (id, name, file) VALUES (%s, %s, %s)"
		
		# lire les données du fichier
		myfile = open(file, 'rb').read()
		
		cur.execute(sql,(id, name, psycopg2.Binary(myfile)))
		
		# valider l'insertion dans la base de données
		conn.commit()
		
		#fermeture de la connexion à la base de données
		cur.close()
		conn.close()
		print("La connexion PostgreSQL est fermée")

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


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

 
 

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

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

  • Tout d’abord, établissez une connexion PostgreSQL à 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 psycopg2

def getFile(id):
	try:
		conn = psycopg2.connect(
						user = "postgres",
						password = "admin",
						host = "localhost",
						port = "5432",
						database = "my_db"
		)
		cur = conn.cursor()

		sql = "SELECT * FROM person WHERE id = %s"
		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")
		
		#fermeture de la connexion à la base de données
		cur.close()
		conn.close()
		print("La connexion PostgreSQL est fermée")

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



getFile(1)

Sortie:

Stocker le fichier sur le disque

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

 

Partagez cet article

Laisser un commentaire

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