SQLAlchemy 2.0: ORM Python rivisto con typing moderno

SQLAlchemy 2.0 (gennaio 2023) di Mike Bayer: riscrittura con API 2.0-style unificata, typing full, async support, ORM + Core convergenti. Il pilastro della persistenza relazionale in Python da oltre 15 anni.

Open SourceR&D SQLAlchemyMike BayerPythonORMSQLTypingOpen Source

Il SQL toolkit di Python

SQLAlchemy, creato da Mike Bayer nel 2006, è il principale SQL toolkit e ORM per Python. Ha tre livelli:

  • Core — espressioni SQL builder (query builder agnostico)
  • ORM — mapping classi-tabelle, unit of work, identity map
  • Engine — connection pooling, driver abstraction

Licenza MIT. Compatibile con PostgreSQL, MySQL, MariaDB, SQLite, Oracle, MSSQL, e decine di altri database via driver.

SQLAlchemy 2.0 — gennaio 2023

SQLAlchemy 2.0, rilasciato il 26 gennaio 2023 dopo anni di lavoro, è una major release con cambiamenti strutturali:

API 2.0-style unificata

Precedentemente l’ORM e il Core avevano API divergenti. La 2.0 unifica: Select di Core e query ORM usano la stessa sintassi basata su select(), coerente su tutto.

# Legacy 1.x style
result = session.query(User).filter_by(name='Anna').all()

# 2.0 style (raccomandato)
stmt = select(User).where(User.name == 'Anna')
result = session.execute(stmt).scalars().all()

Typing completo

SQLAlchemy 2.0 dichiara le relazioni con type hints moderni (PEP 484+):

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column

class Base(DeclarativeBase): pass

class User(Base):
    __tablename__ = 'users'
    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str]
    email: Mapped[str | None]

Query tipizzate, migliore supporto mypy/pyright.

Async support

async with AsyncSession(engine) as session:
    result = await session.execute(select(User))
    users = result.scalars().all()

Async nativo (da 1.4, consolidato 2.0) per uso con FastAPI, Starlette, asyncio.

Uso

SQLAlchemy è usato in:

  • Flask + Flask-SQLAlchemy come pattern standard
  • FastAPI + SQLAlchemy + Alembic (migrations)
  • SQLModel (Sebastián Ramírez) — alto-livello su Pydantic + SQLAlchemy
  • Celery — persistenza risultati
  • Airflow — metadata DB

Alembic (migrations)

Alembic, stesso autore, è il migration tool per SQLAlchemy. Genera migration script Python da differenze tra models e schema DB. Standard per evoluzione schema in applicazioni Python.

Nel contesto italiano

SQLAlchemy è in praticamente ogni applicazione Python production-grade italiana, dalle PMI alle grandi aziende.


Riferimenti: SQLAlchemy 2.0 (26 gennaio 2023). Mike Bayer. Licenza MIT. Core + ORM + Engine. Alembic per migrations. Async support (1.4+). Type hints (PEP 484).

Vuoi supporto? Sei sotto attacco? Stato dei servizi
Vuoi supporto? Sei sotto attacco? Stato dei servizi