Vue d'ensemble
SQLAlchemy 2.1, publie le 16 mars 2025, introduit les relations write-only et ameliore les performances des requetes.
Fonctionnalites principales
Relations write-only
Les relations WriteOnlyMapped evitent le chargement en memoire de grandes collections. Les elements sont ajoutes ou supprimes sans charger la collection entiere.
python
from sqlalchemy.orm import DeclarativeBase, Mapped, WriteOnlyMapped
from sqlalchemy.orm import mapped_column, relationship
from sqlalchemy import ForeignKey
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = 'users'
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str]
# Grande collection : write-only
logs: WriteOnlyMapped[list['Log']] = relationship()
class Log(Base):
__tablename__ = 'logs'
id: Mapped[int] = mapped_column(primary_key=True)
user_id: Mapped[int] = mapped_column(ForeignKey('users.id'))
message: Mapped[str]
Performances ameliorees
Le compilateur de requetes est optimise pour generer du SQL plus efficace, avec un meilleur support du batching pour les insertions.
python
from sqlalchemy import create_engine, select
from sqlalchemy.orm import Session
engine = create_engine('sqlite:///app.db')
with Session(engine) as session:
# Insertion par batch optimisee
session.add_all([
User(name=f'user_{i}') for i in range(1000)
])
session.commit()
# Requete optimisee
stmt = select(User).where(User.name.like('user_1%'))
users = session.scalars(stmt).all()
