Gérer une Base de Données avec Python

Les logiciels de gestion de bases de données sont appelés Système de Gestion de Base de Données Relationnelles (SGBDR).

MySQL est l’un des SGBDR les plus utilisés au monde. Il est gratuit et très puissant et répond à une logique client/serveur : c’est à dire que plusieurs clients (ordinateurs distants) peuvent se connecter sur un seul serveur qui héberge les données.

Pour accéder à une base de donnée gérée par un serveur MySQL, il faut utiliser la bibliothèque mysql-connector de Python :

pip install mysql-connector

Création de la base de données

Il faut d’abord avoir installé un SGDB, par exemple, sur un Raspberry, mysql-server.

Ensuite, pour créer la base, il est possible d’utiliser phpMyAdmin, mais on peut aussi procéder en ligne de commande :

Première utilisation

sudo mysql

 

Création du mot de passe

SET PASSWORD FOR root@localhost=PASSWORD('azerty');

Attention ! azerty  n’est pas un mot de passe très judicieux !

On peut bien sûr faire ça pour plusieurs utilisateurs …

 

Attribution des privilèges

GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'xxxxxx' WITH GRANT OPTION;

 

Création d’une base de données

CREATE DATABASE mabasededonnees;

 

Connexion au serveur MySQL

Supposons que nous souhaitions créer une nouvelle table « Produits » dans la base de donnée « magasin » située sur le serveur d’adresse « 192.168.125.2 ».

L’utilisateur « georges » possède tous les droits sur cette base de données, et peut s’y connecter avec le mot de passe « what-else? ».

Remarque, pour créer et gérer des utilisateurs sur un serveur MySQL, il est conseillé d’utiliser phpmyadmin.

Voici la table à créer :

import mysql.connector

conn = mysql.connector.connect(host="192.168.125.2",
                               user="georges", password="what-else?", 
                               database="magasin")
cursor = conn.cursor()

# Opérations à réaliser sur la base ...

conn.close()

 

Créer une table de données MySQL

Pour créer une table, on exécute la requête SQL CREATE TABLE :

cursor.execute("""
   CREATE TABLE IF NOT EXISTS Produits (
      ref int(6) NOT NULL,
      nom varchar(100) DEFAULT NULL,
      stock int(4) DEFAULT NULL,
      prix float(5,2) DEFAULT NULL,
      PRIMARY KEY(ref),
      CHECK (stock>=0)
      );
""")

 

Insérer des données

Pour insérer un enregistrement dans une table, on exécute la requête SQL INSERT INTO :

Il existe deux manières de le faire :

  • A partir d’une liste ou d’un tuple :
reference = (554871, "Confiture de fraise 250g", 10, 4.8)
cursor.execute("""INSERT INTO Produits (ref, nom, stock, prix) VALUES(%s, %s, %s, %s)""", reference)
  • A partir d’un dictionnaire :
reference = {'ref': 543154, 'nom' : "Gelée de coing 300g", 'stock' : 5, 'prix' : 3.75}
cursor.execute("""INSERT INTO Produits (ref, nom, stock, prix) VALUES(%(ref)d, "%(nom)s", %(stock)d, %(prix)f)""", reference)

 

Pour que les données soient effectivement sauvegardées dans la table, il faut avant de fermer la connexion « commettre » les modifications :

conn.commit()

 

Accéder à des données

Pour accéder aux données d’une base de données, on exécute une requête SELECT :

cursor.execute("""SELECT ref, nom, prix FROM Produits WHERE stock > %d """, (0, ))
rows = cursor.fetchall()
for row in rows:
   print('{0} : {1} - {2}'.format(row[0], row[1], row[2]))

 

 

Exemple de code complet

Le code suivant reprend l’ensemble des notions vues plus haut et permet en plus la gestion des erreurs (indispensable dans le cas où le programme sert de serveur HTML).

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import mysql.connector
import sys

sql_create = """
CREATE TABLE IF NOT EXISTS Produits ( 
   ref int(6) NOT NULL, 
   nom varchar(100) DEFAULT NULL, 
   stock int(4) DEFAULT NULL, 
   prix float(5,2) DEFAULT NULL, 
   PRIMARY KEY(ref), 
   CHECK (stock>=0) ); """

try:
   conn = mysql.connector.connect(host="192.168.125.2", 
                                  user="georges", password="what-else?", 
                                  database="magasin")

   cursor = conn.cursor()
   cursor.execute(sql_create)

   try:
      reference = (554871, "Confiture de fraise 250g", 10, 4.8) 
      cursor.execute("""INSERT INTO Produits (ref, nom, stock, prix) VALUES(%s, %s, %s, %s)""", reference)
      
      reference = {'ref': 543154, 'nom' : "Gelée de coing 300g", 'stock' : 5, 'prix' : 3.75} 
      cursor.execute("""INSERT INTO Produits (ref, nom, stock, prix) VALUES(%(ref)d, "%(nom)s", %(stock)d, %(prix)f)""", reference)

      conn.commit()

   except:
      # En cas d'erreur on annule les modifications
      conn.rollback()

   cursor.execute("""SELECT ref, nom, prix FROM Produits WHERE stock > %d """, (0, )) 
   rows = cursor.fetchall() 
   for row in rows: 
      print('{0} : {1} - {2}'.format(row[0], row[1], row[2]))


except mysql.connector.errors.InterfaceError as e:
   print("Error %d: %s" % (e.args[0],e.args[1]))
   sys.exit(1)


finally:
   # On ferme la connexion
   if conn:
      conn.close()

 

Sources : http://apprendre-python.com/page-database-data-base-donnees-query-sql-mysql-postgre-sqlite

Vous aimerez aussi...

Laisser un commentaire

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