SQLModel – ORM basé sur Pydantic pour Python

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction

SQLAlchemy et Pydantic sont deux outils puissants pour tout développeur Python : l'un pour interagir avec les bases de données, l'autre pour valider les données. Mais il y avait toujours un fossé entre eux. La solution ? SQLModel – un ORM basé sur Pydantic qui combine le meilleur des deux mondes.

Avec SQLModel, vous pouvez utiliser des modèles Pydantic typés comme des tables ORM SQLAlchemy. Cela simplifie le développement, accélère la création d'API et élimine la duplication de code entre vos modèles de base de données et vos sérialiseurs.

Qu'est-ce que SQLModel et pourquoi l'utiliser ?

SQLModel est une bibliothèque ORM moderne pour Python, créée par Sebastián Ramírez (le créateur de FastAPI) en 2021. Elle résout l'un des plus gros problèmes du développement web : la duplication de code entre les modèles de base de données et les schémas de validation.

Les avantages clés de SQLModel

SQLModel offre aux développeurs une interface unifiée pour gérer les bases de données et valider les données. Voici ses principaux atouts :

  • Modèle de données unique : un seul modèle pour la base de données et l'API
  • Validation automatique : validation intégrée grâce à Pydantic
  • Typage fort : support complet des types Python et des IDE
  • Compatibilité : fonctionne avec les projets SQLAlchemy existants
  • Asynchrone : support natif d'async/await

Installation et configuration

Installation de base

pip install sqlmodel

Installation avec dépendances supplémentaires

Pour PostgreSQL :

pip install sqlmodel[postgresql]

Pour le mode asynchrone :

pip install sqlmodel[async]

Installation complète avec toutes les dépendances :

pip install "sqlmodel[postgresql,async]"

Connexion à la base de données

from sqlmodel import SQLModel, create_engine

# SQLite (pour le développement)
engine = create_engine("sqlite:///database.db")

# PostgreSQL
engine = create_engine("postgresql://user:password@localhost/dbname")

# MySQL
engine = create_engine("mysql+pymysql://user:password@localhost/dbname")

Les bases de SQLModel

Créer un modèle de base

from sqlmodel import SQLModel, Field
from typing import Optional

class User(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str = Field(index=True)
    email: str = Field(unique=True)
    age: int = Field(ge=0, le=150)
    is_active: bool = Field(default=True)

Paramètres de Field

SQLModel utilise le Field enrichi de Pydantic avec des fonctionnalités supplémentaires :

class Product(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str = Field(max_length=100, index=True)
    price: float = Field(gt=0, description="Prix du produit")
    category_id: int = Field(foreign_key="category.id")
    created_at: datetime = Field(default_factory=datetime.now)

Créer les tables dans la base de données

from sqlmodel import SQLModel, create_engine

engine = create_engine("sqlite:///database.db")

# Création de toutes les tables
SQLModel.metadata.create_all(engine)

# Création d'une table spécifique
User.metadata.create_all(engine)

Opérations CRUD avec SQLModel

Créer des enregistrements

from sqlmodel import Session

# Création d'un seul enregistrement
user = User(name="Jean", email="jean@example.com", age=25)

with Session(engine) as session:
    session.add(user)
    session.commit()
    session.refresh(user)  # Récupérer l'ID depuis la base
    print(f"Utilisateur créé avec l'ID : {user.id}")

Recommendations