"""SQLAlchemy 2.0 声明式基类 + 通用 mixin。""" from __future__ import annotations import uuid from datetime import datetime from sqlalchemy import Uuid, func, text from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column class Base(DeclarativeBase): pass class UuidPk: id: Mapped[uuid.UUID] = mapped_column( Uuid, primary_key=True, server_default=text("gen_random_uuid()") ) class CreatedAt: created_at: Mapped[datetime] = mapped_column(server_default=func.now(), nullable=False) class TimestampedMixin(CreatedAt): updated_at: Mapped[datetime] = mapped_column( server_default=func.now(), onupdate=func.now(), nullable=False )