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}")