Overview

SQLAlchemy 2.1, released on March 16, 2025, introduces write-only relationships and improves query performance.

Main Features

Write-only relationships

WriteOnlyMapped relationships avoid loading large collections into memory. Elements are added or removed without loading the entire collection.

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]
    # Large 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]

Performance improvements

The query compiler is optimized to generate more efficient SQL, with better batching support for inserts.

python
from sqlalchemy import create_engine, select
from sqlalchemy.orm import Session

engine = create_engine('sqlite:///app.db')

with Session(engine) as session:
    # Optimized batch insert
    session.add_all([
        User(name=f'user_{i}') for i in range(1000)
    ])
    session.commit()

    # Optimized query
    stmt = select(User).where(User.name.like('user_1%'))
    users = session.scalars(stmt).all()

Sources