Titre : Connexion à des bases de données SQL avec SQLAlchemy


Introduction

Lorsque vous travaillez avec des bases de données relationnelles en Python, vous pouvez opter pour des solutions simples comme sqlite3, ou utiliser un ORM (Object Relational Mapper) comme SQLAlchemy. SQLAlchemy est une bibliothèque puissante qui vous permet d'interagir avec votre base de données en manipulant des objets Python au lieu d'écrire du SQL brut.

Compatible avec la plupart des SGBD (PostgreSQL, MySQL, SQLite, etc.), SQLAlchemy vous offre un contrôle complet, une flexibilité maximale et une portabilité simplifiée de vos projets entre différents moteurs de bases de données.

Dans cet article, nous allons découvrir comment se connecter à une base SQL avec SQLAlchemy, créer des tables, effectuer des requêtes, et manipuler des données efficacement.


1. Installation de SQLAlchemy

Installez la bibliothèque avec pip :

pip install sqlalchemy

Pour travailler avec une base SQLite (par défaut), aucune dépendance supplémentaire. Pour d’autres SGBD comme PostgreSQL ou MySQL, vous devrez installer des drivers (psycopg2, pymysql, etc.).


2. Connexion à une base SQLite (ou autre)

2.1. Exemple avec SQLite

from sqlalchemy import create_engine

engine = create_engine("sqlite:///ma_base.db", echo=True)

  • sqlite:/// indique l’utilisation d’un fichier local SQLite.
  • echo=True affiche les requêtes SQL générées.

2.2. Exemple avec PostgreSQL

engine = create_engine("postgresql+psycopg2://user:password@localhost/ma_base")


3. Définir une table avec SQLAlchemy (ORM)

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

Base = declarative_base()

class Utilisateur(Base):
    __tablename__ = "utilisateurs"
    id = Column(Integer, primary_key=True)
    nom = Column(String)
    age = Column(Integer)


4. Créer la base de données

Base.metadata.create_all(engine)

Cela génère automatiquement les tables définies dans vos classes.


5. Créer une session de travail

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()

La session permet de faire toutes les opérations sur la base (ajout, suppression, requêtes…).


6. Insérer des données dans la base

u1 = Utilisateur(nom="Alice", age=25)
u2 = Utilisateur(nom="Bob", age=30)

session.add(u1)
session.add_all([u2])
session.commit()


7. Lire des données depuis la base

# Récupérer tous les utilisateurs
utilisateurs = session.query(Utilisateur).all()
for user in utilisateurs:
    print(user.nom, user.age)

Requête filtrée

alice = session.query(Utilisateur).filter_by(nom="Alice").first()
print(alice.id, alice.nom)


8. Mettre à jour des données

alice.age = 26
session.commit()


9. Supprimer des données

session.delete(alice)
session.commit()


10. Exemple complet


from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import declarative_base, sessionmaker

Base = declarative_base()

class Utilisateur(Base):
    __tablename__ = "utilisateurs"
    id = Column(Integer, primary_key=True)
    nom = Column(String)
    age = Column(Integer)

# Connexion et session
engine = create_engine("sqlite:///ma_base.db", echo=True)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()

# Ajout
session.add(Utilisateur(nom="Eve", age=27))
session.commit()

# Lecture
for u in session.query(Utilisateur).all():
    print(u.nom, u.age)


11. Bonus : avantages de SQLAlchemy ORM

  • Gain de temps avec une syntaxe orientée objet
  • Plus sûr que les requêtes SQL brutes (protection contre l'injection)
  • Permet de changer de moteur de base de données facilement
  • Gère automatiquement les connexions et les transactions

Conclusion

SQLAlchemy est une solution robuste et flexible pour interagir avec les bases de données SQL en Python. Grâce à son ORM puissant, il permet d'écrire moins de code SQL tout en gardant une grande expressivité. C’est un excellent choix pour les projets qui nécessitent de la maintenabilité, une migration simple, et une structure propre des données.

Laisser un commentaire

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