> 백엔드 개발 > 파이썬 튜토리얼 > 믹스인 및 주석을 사용하여 SQLAlchemy 모델 모듈화

믹스인 및 주석을 사용하여 SQLAlchemy 모델 모듈화

DDD
풀어 주다: 2025-01-04 20:08:43
원래의
659명이 탐색했습니다.

Modularizing SQLAlchemy Models with Mixins and Annotations
확장 가능하고 유지 관리가 가능한 모델을 구축하려면 특히 여러 모델에서 공유 동작이나 공통 열 유형을 처리할 때 모듈식 접근 방식이 필요한 경우가 많습니다. 이번 블로그에서는 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)
로그인 후 복사
로그인 후 복사
설명
  • @declared_attr: 속성이 상속 모델에 동적으로 추가되도록 합니다.
  • default 및 onupdate: 생성 및 업데이트에 대한 타임스탬프를 자동으로 설정합니다.

 

공통 주석 정의

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)
]
로그인 후 복사
설명
  • UUID 기본 키: uuid4pk 주석은 기본 키에 대한 범용 고유 식별자를 정의합니다.
  • 이름 열: 이름 주석은 최대 길이가 30자이고 NULL 값이 없는 문자열 열을 보장합니다.

 

믹스인과 주석을 사용하여 모델 구축

믹스인과 주석을 사용하면 구현을 간결하고 읽기 쉽게 유지하면서 공유 동작과 속성을 상속하는 모델을 정의할 수 있습니다.
 
파일: 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)
로그인 후 복사
로그인 후 복사
설명
  • Declarative Base: Base는 모든 SQLAlchemy 모델의 기초 역할을 합니다.

 

이 접근 방식의 이점

1. 명확한 우려사항 분리

  • timestamp_mixin.py: 재사용 가능한 로직(예: 타임스탬프)이 포함되어 있습니다.
  • common_annotations.py: 공통 열 속성(예: UUID, 문자열)을 정의합니다.
  • user.py: 이러한 빌딩 블록을 콘크리트 모델로 결합합니다.

2. 유지보수 용이성

  • 타임스탬프 작동 방식을 변경하거나 열 제약 조건을 업데이트해야 하는 경우 timestamp_mixin.py 또는 common_annotations.py 파일만 수정하면 됩니다. 변경 사항은 모든 종속 모델에 자동으로 반영됩니다.

3. 확장성

  • 프로젝트가 성장함에 따라 이 구조를 사용하면 중복을 도입하지 않고도 새로운 동작이나 필드 유형을 더 쉽게 추가할 수 있습니다.

   

최종 생각

SQLAlchemy의 mixinsannotations를 사용하여 모델을 모듈화하는 것은 공유 기능과 속성을 처리하기 위한 좋은 전략입니다. 이 접근 방식은 중복을 줄일 뿐만 아니라 깔끔하고 유지 관리 가능한 코드에 대한 모범 사례에도 부합합니다.

위 내용은 믹스인 및 주석을 사용하여 SQLAlchemy 모델 모듈화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿