50 lines
1.1 KiB
Python
50 lines
1.1 KiB
Python
"""
|
|
基础模型定义
|
|
============
|
|
"""
|
|
|
|
import uuid
|
|
from datetime import UTC, datetime
|
|
|
|
from sqlalchemy import DateTime
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
|
|
from app.db.session import Base
|
|
|
|
|
|
class BaseModel(Base):
|
|
"""
|
|
基础模型 - 所有模型继承此类
|
|
|
|
提供:
|
|
- UUID 主键(自动生成)
|
|
- 创建时间
|
|
- 更新时间
|
|
"""
|
|
|
|
__abstract__ = True
|
|
|
|
id: Mapped[str] = mapped_column(
|
|
UUID(as_uuid=False),
|
|
primary_key=True,
|
|
default=lambda: str(uuid.uuid4()),
|
|
)
|
|
|
|
created_at: Mapped[datetime] = mapped_column(
|
|
DateTime(timezone=True),
|
|
default=lambda: datetime.now(UTC),
|
|
nullable=False,
|
|
)
|
|
|
|
updated_at: Mapped[datetime] = mapped_column(
|
|
DateTime(timezone=True),
|
|
default=lambda: datetime.now(UTC),
|
|
onupdate=lambda: datetime.now(UTC),
|
|
nullable=False,
|
|
)
|
|
|
|
def to_dict(self) -> dict:
|
|
"""转换为字典(用于序列化)"""
|
|
return {column.name: getattr(self, column.name) for column in self.__table__.columns}
|