확장 가능하고 유지 관리가 가능한 모델을 구축하려면 특히 여러 모델에서 공유 동작이나 공통 열 유형을 처리할 때 모듈식 접근 방식이 필요한 경우가 많습니다. 이번 블로그에서는 SQLAlchemy의 믹스인과 주석을 사용하여 모델을 모듈화하는 방법을 살펴보겠습니다.
프로젝트 작업을 하다 보면 Created_at 및update_at 타임스탬프를 모델에 추가하거나 UUID 기본 키와 같은 공통 열 유형을 정의하는 등 반복적인 작업을 자주 접하게 됩니다. 이러한 문제를 별도의 구성 요소로 모듈화하면 다음과 같은 여러 가지 이점이 있습니다.
1. 재사용성: 공유 동작 및 열 정의를 여러 모델에서 사용할 수 있습니다.
2. 유지관리성: 한 곳의 변경 사항이 모든 종속 모델에 전파됩니다.
3. 가독성: 관심사를 명확하게 분리하면 코드를 더 쉽게 이해할 수 있습니다.
믹스인은 모델에 재사용 가능한 로직 또는 필드를 제공합니다. Create_at 및update_at 필드를 상속받는 모든 모델에 자동으로 추가하는 TimestampMixin을 정의해 보겠습니다.
파일: timestamp_mixin.py
from datetime import datetime from sqlalchemy import Column, DateTime from sqlalchemy.ext.declarative import declared_attr class TimestampMixin: @declared_attr def created_at(cls): return Column(DateTime, default=datetime.utcnow, nullable=False) @declared_attr def updated_at(cls): return Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
Python의 Typing.Annotated를 통해 사용할 수 있는 SQLAlchemy의 Annotated 유형을 사용하면 재사용 가능한 열 속성을 정의할 수 있습니다. 예를 들어 UUID 기본 키 또는 특정 제약 조건이 있는 문자열 열을 정의할 수 있습니다.
파일: common_annotations.py
from typing import Annotated from uuid import uuid4 from sqlalchemy import String from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import mapped_column uuid4pk = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid4, nullable=False) ] name = Annotated[ str, mapped_column(String(30), nullable=False) ]
믹스인과 주석을 사용하면 구현을 간결하고 읽기 쉽게 유지하면서 공유 동작과 속성을 상속하는 모델을 정의할 수 있습니다.
파일: user.py
from datetime import datetime from sqlalchemy import Column, DateTime from sqlalchemy.ext.declarative import declared_attr class TimestampMixin: @declared_attr def created_at(cls): return Column(DateTime, default=datetime.utcnow, nullable=False) @declared_attr def updated_at(cls): return Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
1. 명확한 우려사항 분리
2. 유지보수 용이성
3. 확장성
SQLAlchemy의 mixins 및 annotations를 사용하여 모델을 모듈화하는 것은 공유 기능과 속성을 처리하기 위한 좋은 전략입니다. 이 접근 방식은 중복을 줄일 뿐만 아니라 깔끔하고 유지 관리 가능한 코드에 대한 모범 사례에도 부합합니다.
위 내용은 믹스인 및 주석을 사용하여 SQLAlchemy 모델 모듈화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!