Vue d'ensemble

Flask-SQLAlchemy 3.0, publié le 6 janvier 2023, ajoute le support de SQLAlchemy 2.0 et réécrit la gestion des sessions.

Fonctionnalités principales

Support de SQLAlchemy 2.0

L'extension supporte le nouveau style déclaratif de SQLAlchemy 2.0 avec mapped_column() et DeclarativeBase, tout en restant compatible avec l'ancien style.

python
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column

class Base(DeclarativeBase):
    pass

db = SQLAlchemy(model_class=Base)
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db.init_app(app)

class Article(db.Model):
    id: Mapped[int] = mapped_column(primary_key=True)
    titre: Mapped[str] = mapped_column(db.String(200))

Réécriture des sessions

La gestion des sessions a été entièrement réécrite pour mieux s'intégrer au cycle de vie des requêtes Flask. La session est automatiquement fermée à la fin de chaque requête.

python
from flask import Flask

@app.route('/articles')
def liste_articles():
    # La session est gérée automatiquement
    articles = db.session.execute(
        db.select(Article).order_by(Article.titre)
    ).scalars().all()
    return [{'id': a.id, 'titre': a.titre} for a in articles]

# db.session est fermée à la fin de la requête
# Pas besoin de db.session.remove() explicite

Sources