"""Declarative base with a fixed naming convention. The naming convention makes Alembic autogenerate deterministic, named constraints — essential for clean, reversible migrations. """ from sqlalchemy import MetaData from sqlalchemy.orm import DeclarativeBase NAMING_CONVENTION = { "ix": "ix_%(column_0_label)s", "uq": "uq_%(table_name)s_%(column_0_name)s", "ck": "ck_%(table_name)s_%(constraint_name)s", "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", "pk": "pk_%(table_name)s", } class Base(DeclarativeBase): """Base for all ORM models. Import models so Alembic sees their metadata.""" metadata = MetaData(naming_convention=NAMING_CONVENTION)