Utilisation de SQLAlchemy pour la gestion des bases de données en Python

Installation de SQLAlchemy


pip install sqlalchemy

Pour se conencter à des bases de données spécifiques, installez également les pilotes nécesssaires :


# PostgreSQL
pip install psycopg2-binary

# MySQL
pip install mysql-connector-python

Concepts fondamentaux

  • Moteur : Responsable de la communication avec la base de données.
  • Séance : Gère toutes les opérations de persistance.
  • Modèle : Classe de modèle de données correspondant aux tables de la base de données.
  • Requête : Objet utilisé pour construire et exécuter des requêtes.

Connexion à la base de données


from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

moteur = create_engine('sqlite:///exemple.db', echo=True)
SessionLocale = sessionmaker(autocommit=False, autoflush=False, bind=moteur)
session_actuelle = SessionLocale()

Définition des modèles de données


from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship, declarative_base

BaseDeDonnees = declarative_base()

class Client(BaseDeDonnees):
    __tablename__ = 'clients'
    
    id_client = Column(Integer, primary_key=True, index=True)
    nom = Column(String(50), nullable=False)
    courriel = Column(String(100), unique=True, index=True)
    articles = relationship("Article", back_populates="auteur")

class Article(BaseDeDonnees):
    __tablename__ = 'articles'
    
    id_article = Column(Integer, primary_key=True, index=True)
    titre = Column(String(100), nullable=False)
    contenu = Column(String(500))
    auteur_id = Column(Integer, ForeignKey('clients.id_client'))
    auteur = relationship("Client", back_populates="articles")

Création des tables de la base de données


BaseDeDonnees.metadata.create_all(bind=moteur)

Opérations CRUD de base

Création de données


nouveau_client = Client(nom="Jean Dupont", courriel="jean.dupont@example.com")
session_actuelle.add(nouveau_client)
session_actuelle.commit()

Lecture de données


tous_clients = session_actuelle.query(Client).all()
premier_client = session_actuelle.query(Client).first()
client_par_id = session_actuelle.query(Client).get(1)

Mise à jour de données


client = session_actuelle.query(Client).get(1)
client.nom = "Jean Paul"
session_actuelle.commit()

Suppression de données


client_a_supprimer = session_actuelle.query(Client).get(1)
session_actuelle.delete(client_a_supprimer)
session_actuelle.commit()

Gestion des transactions


try:
    client_nouveau = Client(nom="Client Test", courriel="test@example.com")
    session_actuelle.add(client_nouveau)
    session_actuelle.commit()
except Exception as erreur:
    session_actuelle.rollback()
    print(f"Erreur: {erreur}")

Étiquettes: SQLAlchemy Python ORM Bases de données crud

Publié le 9 août à 14h06